2010-05-11 55 views
0

我正在使用cakephp v1.26。
我得到了这样的控制器功能:
Cakephp中传递参数的不同方法

class testingsController extends AppController{ 

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

} 

我不知道是否有任何更好的方法来一个参数传递给动作测试。
但我遇到了一些网站,并得到了这两种方法。
下面的参数传递方法有什么区别吗?

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

回答

7

url/testings/testing/1

使用标准的路线,这将调用TestingsController::testing(1)

这是标准参数传递,超出/:controller/:action/的任何参数都会按原样传递给被调用的操作。

/controllers/action/param1/param2对应
ControllersController::action($param1, $param2)

url/testings/testing:1

使用标准的路线,这将调用TestingsController::index()
设置$this->params['named']['testing']1。这被称为命名参数。

命名参数可以按任意顺序传递。这两个URL是等价的:
url/testings/testing:1/foo:2
url/testings/foo:2/testing:1

他们会被传递给函数,如function testing($id = null)$id将是null。它们仅在$this->params['named']阵列中可用。

+1

是,一个更详细的回答不是我的,我都忘了[命名]!对我感到羞耻;) – 2010-05-11 09:38:02

1

你拥有的第一个例子将它当作一个数字参数

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

第二个将通过一个名为双,而不是像数组

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

您可以使用不同的东西。您会注意到,排序列和页面时,分页器使用key:val配对参数。

有在图书进一步信息一点点,http://book.cakephp.org/2.0/en/development/routing.html#passed-arguments