2014-01-10 106 views
5

在CakePHP 3.0命名参数已被删除(感谢上帝)有利于标准的查询字符串参数在线与其他应用程序框架。CakePHP的3.0查询字符串参数VS传递的参数

什么我仍然在努力让我的头周围虽然是在其他的MVC框架,例如ASP.NET,你会传入的ActionResult参数(相同的功能):

Edit(int id = null) { 

    // do stuff with id 

} 

而且该方法会被传入ID作为查询字符串,如:/Edit?id=1,你会使用路由让它非常喜欢:/Edit/1

在CakePHP函数的参数里面方式通不过任何事情:/Edit/1绕过查询字符串理念,还需要对路由改善网址:

function edit($id = null) { 

    // do stuff with $id 

} 

必须像一个传递的参数来完成。

如果我的名字在链接的PARAMS对于编辑,如:

$this->Html->link('Edit', array('action' => 'edit', 'id' => $post->id)); 

然后我要做的:

public function edit() { 

    $id = $this->request->query('id'); 

    // do stuff with $id 

} 

要获取传递的参数ID。会想到它会捡起来,在功能上类似于ASP.NET的CakePHP的3.0,但事实并非如此。

我宁愿前缀的编辑链接传递的值,而不是只是路过他们,所以我没有给尽可能多的担心序的另一端,我知道他们是什么等

有任何人都玩过的任何数据传递到他们在CakePHP的方法,可以揭示做事的正确方法更加轻便的这些方式如何变化在3.0版本将提高这方面的事情......

回答

10

有一个CakePHP 3.0中的请求参数类型很少。让我们回顾一下他们:

查询字符串:与$this->request->query()被访问时,不传递给控制器​​的功能作为参数,并为了让你需要做的Html->link('My link', ['my_query_param' => $value])

传递的参数链接:特殊参数类型是由控制器函数作为参数接收的参数类型。他们访问无论是作为参数,或者通过检查$this->request->params['pass']。您建立与不同的路线上传递ARGS链接,但该缺省路由你只需要添加位置PARAMS到链接像Html->link('My link', ['action' => view, $id, $secondPassedArg, $thirdPassedArg])

请求参数:传递的参数,这是一个的子类型。请求参数是可以住在请求出,可以从路径中提取的信息的值。在他们的一生中,Params可以转换为其他类型的params。

考虑这条路线:

Router::connect('/articles/:year/:month/:day', [ 
    'controller' => 'articles', 'action' => 'archive' 
]); 

我们已经有效地创造了这条路线3个请求参数:yearmonthday,他们可以用$this->request->year$this->request->month$this->request->day进行访问。为了建立一个链接,这个我们做的:

$this->Html->link(
    'My Link', 
    ['action' => 'archive', 'year' => $y, 'month' => $m, 'day' => $d] 
); 

注意,作为路由指定这些参数,它们不会转换为查询字符串PARAMS。现在,如果我们想对那些转换为传递的参数,我们连这条路改为:

Router::connect('/articles/:year/:month/:day', 
    ['controller' => 'articles', 'action' => 'archive'], 
    ['pass' => ['year', 'month', 'day']] 
); 

我们的控制器功能会是这个样子:

function archive($year, $month, $day) { 
    ... 
} 
+0

为什么CakePHP的让你的类型,因为它之间的选择在ASP.NET中看起来比我看到的更干净,因为直到您使用路由器使其成为漂亮的版本(您在CakePHP中通过传递的参数默认看到)之前,默认查询字符串。感谢Jose的信息,非常感谢。 – Cameron

相关问题