2010-05-11 5 views
0

J'utilise cakephp v1.26.
j'ai eu une fonction dans un contrôleur comme ceci:
différentes méthodes pour passer des paramètres dans Cakephp

class testingsController extends AppController{ 

function testing($id=null){ 
$recieved = $id;} 

} 

Je ne sais pas s'il y a des meilleures façons de passer un paramètre à l'essai d'action.
Mais j'ai rencontré quelques sites Web et j'ai obtenu ces deux méthodes.
Y a-t-il une différence entre les méthodes de passage de paramètre suivantes?

1. url/testings/testing/1 
2. url/testings/testing:1 

Répondre

7

url/testings/testing/1

Avec des itinéraires standards, ce appellera TestingsController::testing(1).

Ceci est un passage de paramètre standard, tous les paramètres au-delà de /:controller/:action/ sont transmis "tels quels" à l'action appelée.

/controllers/action/param1/param2 correspond à
ControllersController::action($param1, $param2)

url/testings/testing:1

Avec des itinéraires standards, ce appellera TestingsController::index() et
mis $this->params['named']['testing']-1. Ceci est connu comme un paramètre nommé.

Les paramètres nommés peuvent être transmis dans n'importe quel ordre. Ces deux URL sont équivalentes:
url/testings/testing:1/foo:2
url/testings/foo:2/testing:1

Ils seront pas être transmis à la fonction, comme dans function testing($id = null). $id sera null. Ils sont uniquement disponibles dans le tableau $this->params['named'].

+1

Oui, une réponse beaucoup plus bavard que le mien, et je l'avais oublié [nom]! Honte sur moi ;) –

1

Le premier exemple vous passera comme un paramètre numérique

$this->params[0]; // 1 

La seconde passera une paire nommée, un peu comme un tableau

$this->params['testing']; // 1 

Vous pouvez utiliser pour des choses différentes. Vous remarquerez que le paginateur utilise les paramètres jumelés key:val lors du tri des colonnes et des pages.

Il y a un peu d'informations plus loin dans le livre, http://book.cakephp.org/2.0/en/development/routing.html#passed-arguments

Questions connexes