Cam*_*ron 5 php cakephp cakephp-3.0
在CakePHP 3.0命名参数已被删除(感谢上帝),支持与其他应用程序框架内联的标准查询字符串参数.
我仍然在努力解决的问题是,在其他MVC框架中,例如ASP.NET,你将传递ActionResult中的参数(与函数相同):
Edit( int id = null ) {
// do stuff with id
}
Run Code Online (Sandbox Code Playgroud)
并且该方法将作为查询字符串传递给id:/Edit?id=1并且您将使用路由使其非常类似于:/Edit/1.
在CakePHP中,但是在函数参数中传递的内容如下:
function edit( $id = null ) {
// do stuff with $id
}
Run Code Online (Sandbox Code Playgroud)
必须作为传递参数完成,例如:/Edit/1绕过查询字符串的想法,以及路由以改进URL的需要.
如果我在该编辑的链接中命名params,如:
$this->Html->link('Edit', array('action' => 'edit', 'id' => $post->id));
Run Code Online (Sandbox Code Playgroud)
然后我必须这样做:
public function edit() {
$id = $this->request->query('id');
// do stuff with $id
}
Run Code Online (Sandbox Code Playgroud)
获取传递的参数id.想到它会在像CakePHP 3.0的ASP.NET中那样在功能中提取它,但事实并非如此.
我更喜欢在编辑链接中为传递的值添加前缀而不是仅仅传递它们,所以我不必在另一端担心序数,我知道它们是什么等等.
有没有人使用这些方法将数据传递给CakePHP中的方法,并且可以更好地了解正确的处理方式以及3.0版本中的更改将如何改善这一领域的内容......
Jos*_*uez 10
CakePHP 3.0中有几种类型的请求参数.我们来回顾一下:
查询字符串:被访问$this->request->query(),不作为参数传递给控制器函数,以便建立您需要做的链接Html->link('My link', ['my_query_param' => $value])
传递参数:特殊类型的参数是控制器函数作为参数接收的参数.它们可以作为参数或通过检查来访问$this->request->params['pass'].您可以根据路径构建带有传递args的链接,但对于默认路径,您只需将位置参数添加到链接中即可Html->link('My link', ['action' => view, $id, $secondPassedArg, $thirdPassedArg])
请求参数:传递的参数是此参数的子类型.请求参数是可以从可以从路径中提取的信息中存在于请求中的值.参数在其一生中可以转换为其他类型的参数.
考虑这条路线:
Router::connect('/articles/:year/:month/:day', [
'controller' => 'articles', 'action' => 'archive'
]);
Run Code Online (Sandbox Code Playgroud)
我们已经有效地创造了这条路线3个请求参数:year,month和day他们可以访问$this->request->year $this->request->month和$this->request->day.为了建立一个链接我们做:
$this->Html->link(
'My Link',
['action' => 'archive', 'year' => $y, 'month' => $m, 'day' => $d]
);
Run Code Online (Sandbox Code Playgroud)
请注意,由于路径指定了这些参数,因此它们不会转换为查询字符串参数.现在,如果我们想将这些转换为传递的参数,我们将连接此路由:
Router::connect('/articles/:year/:month/:day',
['controller' => 'articles', 'action' => 'archive'],
['pass' => ['year', 'month', 'day']]
);
Run Code Online (Sandbox Code Playgroud)
我们的控制器功能现在看起来像:
function archive($year, $month, $day) {
...
}
Run Code Online (Sandbox Code Playgroud)