2011-03-31 83 views
0

最初在Kohana 3中,您可以通过URL传递控制器动作参数/参数,如:Kohana 3专家,处理请求参数Route :: set(),request-> params()in K3 v。> = 3.1

http:/website/controller/actionname/param1/param2/.../paramX 

,并通过简单地定义动作,如处理:

public action_actionname($params) 
{ 
    $params_array = explode("/", $params); 
    //you can now use $params_array[0], $params_array[1], ... 
} 

现在看来,因为V3.1他们决定弃用此功能(这里是link),它应该被淘汰v3.2

看来他们希望你使用Route :: Set()request-> param()方法代替。这是否意味着每次在控制器中定义一个方法/动作时,都必须为应用程序中其他位置的每个参数定义一个单独的路由? 任何人都可以请向我解释这是如何工作在简单的条件。看起来好像很多不必要的“麻烦”,只是简单地调用一个函数。

回答

3

也许你应该考虑在你的路由中使用正则表达式参数来覆盖默认的匹配行为......我通常使用它来捕获一个KO3“参数”中的多个URL参数。例如:

Route::set('route1', '<controller>/<action>(/<param_list>)', array('param_list'=>'.*')) 
->defaults(array(
    'controller' => 'my_default_controller', 
    'action'  => 'my_default_index' 
)); 

现在在你的控制器,$this->request->param("param_list")将等于任何匹配的正则表达式表达.*这意味着你可以捕捉到URL的,就像你希望,用斜线和所有的休息!

+0

我也是这样设置的(除了** request-> param()**)部分,这是我之前能够传递多个参数的部分。前段时间,我在** bootstrap.php **中设置了** Route :: Set()**,并完全忘记了它,并且我认为这是K3的默认设置。就像你指出的那样,我也来到了这个** request-> param()**解决方案。所以我想这可以解决我的问题,但我仍然会继续,并接受你的答案是正确的!如果我现在可以在HMVC中寻求子请求的路由...,但这是一组不同的问题。谢谢! :) – techexpert 2011-04-01 02:16:55