Question

Dans CakePHP 3.0, les paramètres nommés ont été supprimés (Dieu merci) au profit de paramètres de chaîne de requête standard intégrés à d'autres frameworks d'application.

Ce que j'ai encore du mal à comprendre, c'est que dans d'autres frameworks MVC, par exemple ASP.NET, vous transmettriez les paramètres dans ActionResult (identique à la fonction) :

Edit( int id = null ) {

    // do stuff with id

}

Et cette méthode recevrait l'identifiant sous forme de chaîne de requête comme : /Edit?id=1 et vous utiliseriez Routage pour le rendre joli comme : /Edit/1.

Dans CakePHP cependant, tout ce qui est passé dans les paramètres de la fonction comme :

function edit( $id = null ) {

    // do stuff with $id

}

Doit être fait en tant que paramètre passé comme : /Edit/1 qui contourne l'idée de la chaîne de requête ainsi que la nécessité d'un routage pour améliorer l'URL.

Si je nomme les paramètres dans le lien pour cette modification comme :

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

Je dois alors faire :

public function edit() {

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

    // do stuff with $id

}

Pour obtenir l'identifiant du paramètre transmis.J'aurais pensé qu'il le récupérerait dans la fonction comme dans ASP.NET pour CakePHP 3.0, mais ce n'est pas le cas.

Je préfère préfixer les valeurs transmises dans le lien d'édition au lieu de simplement les transmettre afin de ne pas avoir à me soucier autant de l'ordinal à l'autre bout et de savoir ce qu'elles sont, etc.

Quelqu'un a-t-il joué avec l'une ou l'autre de ces façons de transmettre des données à ses méthodes dans CakePHP et peut-il nous éclairer davantage sur les bonnes façons de faire les choses et sur la façon dont les changements de la version 3.0 amélioreront les choses dans ce domaine...

Était-ce utile?

La solution

Il existe quelques types de paramètres de requête dans CakePHP 3.0.Passons-les en revue :

La chaîne de requête:sont accessibles avec $this->request->query(), ne sont pas transmis aux fonctions du contrôleur en tant qu'arguments et pour établir un lien, vous devez le faire Html->link('My link', ['my_query_param' => $value])

Arguments passés:Le type spécial d’argument est celui qui est reçu par la fonction de contrôleur en tant qu’argument.On y accède soit comme argument, soit en inspectant $this->request->params['pass'].Vous créez des liens avec des arguments transmis en fonction de l'itinéraire, mais pour l'itinéraire par défaut, vous ajoutez simplement des paramètres de position au lien comme Html->link('My link', ['action' => view, $id, $secondPassedArg, $thirdPassedArg])

Paramètres de demande:Les arguments passés sont un sous-type de celui-ci.Un paramètre de requête est une valeur qui peut résider dans la requête à partir des informations qui pourraient être extraites de la route.Les paramètres peuvent être convertis en d’autres types de paramètres au cours de leur durée de vie.

Considérez cet itinéraire :

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

Nous avons effectivement créé 3 paramètres de requête avec cette route : year, month et day et ils sont accessibles avec $this->request->year $this->request->month et $this->request->day.Afin de créer un lien pour cela, nous faisons :

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

Notez que lorsque la route spécifie ces paramètres, ils ne sont pas convertis en paramètres de chaîne de requête.Maintenant, si nous voulons les convertir en arguments passés, nous connectons cette route à la place :

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

Notre fonction de contrôleur ressemblera désormais à :

function archive($year, $month, $day) {
  ...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top