0

我一直在用链接在 CakePHP 中进行试验,并注意到有时你只是传递参数,有时传递带有前缀名称的参数。两个链接有什么区别:

$this->Html->link('Edit', array('controller'=>'users','action'=>'edit', $user['User']['id']));

$this->Html->link('Edit', array('controller'=>'users','action'=>'edit', 'id'=> $user['User']['id']));

由于路由功能,他们创建的 URL 在很大程度上无关紧要,但在第一个示例中,我直接在控制器方法中访问 id,例如:

public function edit( $id )

但是对于命名参数,我必须使用路由器物理传递它!

任何人都可以对此有所了解吗?有什么区别以及何时使用...

另外值得注意的是,在 CakePHP 3.0 中,他们删除了看起来很奇怪的命名参数,因为两个链接仍然可以工作......对此有什么想法吗?

4

1 回答 1

2

您不必通过路由器传递命名参数。他们只是最终在

$this->request->named[...] // or
$this->request['named'][...]; // or
$this->request->params['named'][...]

它们将被删除以支持查询字符串参数:“?foo = bar&...”,然后将(就像已经!)通过

$this->request->query('foo'); // >= 2.3
$this->request->query['foo']; // <= 2.2

ETC

通过也将始终可通过

$this->request->pass[...]; // or
$this->request['pass'][...]; // or
$this->request->params['pass'][...];

但是你可能已经发现阅读http://book.cakephp.org/2.0/en/controllers/request-response.html

传递一次和命名/查询之间的主要区别在于后者更具可交换性,而传递一次由于它们直接访问

public function xyz($one, $two, $three)

然后更深入地集成,应该用于传递的独特信息。命名/查询的没有特定的顺序,更像是分页和其他流畅的信息。

对我来说,传递的参数实际上改变了网站(自己的规范链接等),而其他人不这样做,并且“规范链接”返回到没有任何命名/查询参数的网站(以避免分页等重复内容)。

于 2012-11-16T20:17:41.053 回答