zend框架在/ delete / 2中获取id

时间:2013-04-09 02:22:57

标签: zend-framework url param

我实际上正在使用zend,我想知道如何在这样的url中获取id:

/delete/2

我知道我可以使用:

// if URL is /delete/id/2
$request->getParam('id');

但我想要的是拥有像第一个/delete/2这样的网址,这对我来说更合乎逻辑。

想法?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我认为你应该能够使用路线解决这类问题。您可以为

创建路线
/delete/2

将此添加到例如config.ini文件中:

[production]
routes.delete.route = "delete/:id"
routes.delete.defaults.controller = delete
routes.delete.defaults.action = index 
routes.delete.id.reqs = "\d+"

在此处指定要匹配的URL,其中以冒号:开头的单词是变量。如您所见,您还可以设置变量regex-style的要求。在您的示例中,id很可能是一个或多个数字,因此对此变量要求\d+

此路由会将网址指向index控制器的delete操作,并将id设置为GET-var。您可以更改此.ini代码以满足您的特定需求。

可以通过将以下代码放入引导程序中来添加路由:

$config = new Zend_Config_Ini('/path/to/config.ini', 'production');
$router = new Zend_Controller_Router_Rewrite();
$router->addConfig($config, 'routes');

有关详细信息,请参阅文档:here用于一般文档,here用于我刚才描述的.ini方法。

答案 1 :(得分:0)

试试这个:将以下函数添加到Bootstrap.php

protected function _initRoute(){
    $this->bootstrap ('frontcontroller');
    $front = $this->getResource('frontcontroller');
    $router = $front->getRouter();
    $deleteRoute = new Zend_Controller_Router_Route(
    'delete/:id',
    array(
        'controller' => '{enter-your-controller-name-here}',
        'action'     => '{enter-your-action-name-here}'
        )
    );
    $router->addRoute('delete', $deleteRoute);
}

不要忘记将{enter-your-controller-name-here}替换为控制器名称,将{enter-your-action-name-here}替换为操作名称。

添加此代码后,$request->getParam('id');应该可以正常运行。