在Zend Framework中使用URL段作为操作方法参数

Jef*_*y04 12 php zend-framework

在Kohana/CodeIgniter中,我可以使用以下格式的URL:

http://www.name.tld/controller_name/method_name/parameter_1/parameter_2/parameter_3 ...
Run Code Online (Sandbox Code Playgroud)

然后按如下方式读取控制器中的参数:

class MyController 
{
    public function method_name($param_A, $param_B, $param_C ...)
    {
        // ... code
    }
}
Run Code Online (Sandbox Code Playgroud)

你如何在Zend框架中实现这一目标?

And*_*lor 11

看一下Zend_Controller_Router类:

http://framework.zend.com/manual/en/zend.controller.router.html

这些将允许您定义Zend_Controller_Router_Route,它以您需要的方式映射到您的URL.

为Index控制器的Index操作设置4个静态参数的示例是:

$router = new Zend_Controller_Router_Rewrite();

$router->addRoute(
    'index',
    new Zend_Controller_Router_Route('index/index/:param1/:param2/:param3/:param4', array('controller' => 'index', 'action' => 'index'))
);

$frontController->setRouter($router);
Run Code Online (Sandbox Code Playgroud)

在定义前端控制器后,会将其添加到引导程序中.

一旦进入您的行动,您就可以使用:

$this->_request->getParam('param1');
Run Code Online (Sandbox Code Playgroud)

在您的操作方法中访问值.

安德鲁


lee*_*eek 6

更新(2016年4月13日): 我的答案中的链接移动并已修复.但是,如果它再次消失 - 这里有一些替代方案,提供有关此技术的一些深入信息,以及使用原始文章作为参考材料:


@ Andrew Taylor的回应是正确的Zend Framework处理URL参数的方式.但是,如果您想在控制器的操作中使用URL参数(如您的示例所示) - 请查看Zend DevZone上的本教程.