我正在使用cakephp v1.26
我在这样的控制器中得到了一个功能:
class testingsController extends AppController{
function testing($id=null){
$recieved = $id;}
}
我不确定是否有更好的方法将参数传递给Action测试
但我遇到过一些网站,并得到了这两种方法
以下参数传递方法有什么不同吗?
1. url/testings/testing/1
2. url/testings/testing:1
答案 0 :(得分: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 :(得分:1)
您拥有的第一个示例将其作为数字参数传递
$this->params[0]; // 1
第二个将传递一个命名对,而不是数组
$this->params['testing']; // 1
您可以使用其中任何一种。您会注意到,在对列和页面进行排序时,分页器使用key:val
个配对参数。
书中有一些进一步的信息,http://book.cakephp.org/2.0/en/development/routing.html#passed-arguments