Pregunta

En CakePHP 3.0, los parámetros con nombre se eliminaron (gracias a Dios) en favor de parámetros de cadena de consulta estándar en línea con otros marcos de aplicaciones.

Sin embargo, lo que todavía me cuesta entender es que en otros marcos MVC, por ejemplo ASP.NET, pasarías los parámetros en ActionResult (igual que la función):

Edit( int id = null ) {

    // do stuff with id

}

Y a ese método se le pasaría la identificación como una cadena de consulta como: /Edit?id=1 y usarías Enrutamiento para hacerlo así: /Edit/1.

Sin embargo, en CakePHP todo lo que se pasa dentro de los parámetros de la función como:

function edit( $id = null ) {

    // do stuff with $id

}

Debe hacerse como un parámetro pasado como: /Edit/1 lo que pasa por alto la idea de la cadena de consulta y también la necesidad de enrutamiento para mejorar la URL.

Si nombro los parámetros en el enlace para esa edición como:

$this->Html->link('Edit', array('action' => 'edit', 'id' => $post->id));

Entonces tengo que hacer:

public function edit() {

    $id = $this->request->query('id');

    // do stuff with $id

}

Para llegar al parámetro id pasado.Pensé que lo recogería en la función como en ASP.NET para CakePHP 3.0 pero no es así.

Prefiero anteponer los valores pasados ​​en el enlace de edición en lugar de simplemente pasarlos para no tener que preocuparme tanto por el ordinal en el otro extremo y saber cuáles son, etc.

¿Alguien ha jugado con alguna de estas formas de pasar datos a sus métodos en CakePHP y puede arrojar más luz sobre las formas correctas de hacer las cosas y cómo los cambios en la versión 3.0 mejorarán las cosas en esta área...

¿Fue útil?

Solución

Hay algunos tipos de parámetros de solicitud en CakePHP 3.0.Repasémoslos:

La cadena de consulta:se accede con $this->request->query(), no se pasan a las funciones del controlador como argumentos y para establecer un enlace debe hacerlo Html->link('My link', ['my_query_param' => $value])

Argumentos pasados:El tipo especial de argumento es el que recibe la función del controlador como argumento.Se accede a ellos ya sea como argumento o inspeccionando $this->request->params['pass'].Usted construye enlaces con argumentos pasados ​​dependiendo de la ruta, pero para la ruta predeterminada simplemente agrega parámetros posicionales al enlace como Html->link('My link', ['action' => view, $id, $secondPassedArg, $thirdPassedArg])

Solicitar parámetros:Los argumentos pasados ​​son un subtipo de este.Un parámetro de solicitud es un valor que puede vivir en la solicitud a partir de la información que podría extraerse de la ruta.Los parámetros se pueden convertir en otros tipos de parámetros durante su vida.

Considere esta ruta:

Router::connect('/articles/:year/:month/:day', [
  'controller' => 'articles', 'action' => 'archive'
]);

Hemos creado efectivamente 3 parámetros de solicitud con esa ruta: year, month y day y se puede acceder a ellos con $this->request->year $this->request->month y $this->request->day.Para construir un enlace para esto hacemos:

$this->Html->link(
  'My Link',
  ['action' => 'archive', 'year' => $y, 'month' => $m, 'day' => $d]
);

Tenga en cuenta que, como la ruta especifica esos parámetros, no se convierten como parámetros de cadena de consulta.Ahora, si queremos convertirlos en argumentos pasados, conectamos esta ruta:

Router::connect('/articles/:year/:month/:day',
  ['controller' => 'articles', 'action' => 'archive'],
  ['pass' => ['year', 'month', 'day']]
);

Nuestra función de controlador ahora se verá así:

function archive($year, $month, $day) {
  ...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top