Zend framework Zend Route-从URL中删除参数名称

Zend framework Zend Route-从URL中删除参数名称,zend-framework,zend-route,Zend Framework,Zend Route,我开始使用Zend框架进行开发,我有一个关于路由的问题。有没有一种方法可以代替像这样的URL: www.mysite.com/newsletter/groups/edit/id/1 请注意: www.mysite.com/newsletter/groups/edit/1 (不带参数名id) 我已将此代码放在引导文件中声明自定义路由: protected function _initRoutes() { $router = Zend_Controller_Front::getInstanc

我开始使用Zend框架进行开发,我有一个关于路由的问题。有没有一种方法可以代替像这样的URL:

www.mysite.com/newsletter/groups/edit/id/1

请注意:

www.mysite.com/newsletter/groups/edit/1

(不带参数名id

我已将此代码放在引导文件中声明自定义路由:

protected function _initRoutes()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();    

    /* Edit Groups */
    $route = new Zend_Controller_Router_Route('groups/edit/:group_id',array('controller' => 'groups','action' => 'edit')); 
    $router->addRoute('group_edit', $route);

    return $router;
}
<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initDoctype()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->doctype('XHTML1_STRICT');
    }

    /**
     * Init Autoloader
     */
    protected function _initAutoload()
    {
        $loader = Zend_Loader_Autoloader::getInstance();
        $loader->setFallbackAutoloader(true);
    }

    /**
     * Adiciona alguns routers
     */
    protected function _initRoutes()
    {

        $router = Zend_Controller_Front::getInstance()->getRouter();


        /* Edit Groups*/
        $route = new Zend_Controller_Router_Route('/groups/edit/:groupId',array('controller' => 'group','action' => 'edit')); 
        $router->addRoute('group_edit', $route);


        return $router;
    }

}
然后,在我的视图文件中,我使用它来回显URL:

<a href="<?=$this->url(array('group_id' => $group->getId()), 'group_edit');?>" class=""><?=$group->getName()?></a>
我的完整Boostrap文件:

protected function _initRoutes()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();    

    /* Edit Groups */
    $route = new Zend_Controller_Router_Route('groups/edit/:group_id',array('controller' => 'groups','action' => 'edit')); 
    $router->addRoute('group_edit', $route);

    return $router;
}
<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initDoctype()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->doctype('XHTML1_STRICT');
    }

    /**
     * Init Autoloader
     */
    protected function _initAutoload()
    {
        $loader = Zend_Loader_Autoloader::getInstance();
        $loader->setFallbackAutoloader(true);
    }

    /**
     * Adiciona alguns routers
     */
    protected function _initRoutes()
    {

        $router = Zend_Controller_Front::getInstance()->getRouter();


        /* Edit Groups*/
        $route = new Zend_Controller_Router_Route('/groups/edit/:groupId',array('controller' => 'group','action' => 'edit')); 
        $router->addRoute('group_edit', $route);


        return $router;
    }

}
在我的编辑操作中,我可以在所有请求参数中执行var_转储,以查看是否设置了groupId,是的,确实如此

array(3) { ["groupId"]=> string(3) "555" ["controller"]=> string(6) "groups" ["action"]=> string(6) "edit" }
顺便说一句,我已经在这里寻找了很多答案,有一个答案,但对我来说没有解决办法


谢谢

您可以尝试删除下划线:

protected function _initRoutes()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();    

    /* Edit Groups */
    $route = new Zend_Controller_Router_Route('groups/edit/:groupId',array('controller' => 'groups','action' => 'edit')); 
    $router->addRoute('group_edit', $route);

    return $router;
}
及之后:

<a href="<?=$this->url(array('groupId' => $group->getId()), 'group_edit');?>" class=""><?=$group->getName()?></a>


下划线不适合在这种情况下使用,我选择将名称放在CamelCased中。

您可以尝试删除下划线:

protected function _initRoutes()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();    

    /* Edit Groups */
    $route = new Zend_Controller_Router_Route('groups/edit/:groupId',array('controller' => 'groups','action' => 'edit')); 
    $router->addRoute('group_edit', $route);

    return $router;
}
及之后:

<a href="<?=$this->url(array('groupId' => $group->getId()), 'group_edit');?>" class=""><?=$group->getName()?></a>


下划线不适合在这种情况下使用,我选择将名称放在CamelCased中。

好的,已解决。

我所做的是向组id添加一个默认值(NULL),因此在我的引导文件中,我现在有以下内容:

$route = new Zend_Controller_Router_Route('/groups/edit/:group_id',array('controller' => 'groups','action' => 'edit', 'group_id' => NULL));

谢谢@philien

好,已解决

我所做的是向组id添加一个默认值(NULL),因此在我的引导文件中,我现在有以下内容:

$route = new Zend_Controller_Router_Route('/groups/edit/:group_id',array('controller' => 'groups','action' => 'edit', 'group_id' => NULL));

谢谢@philien

我试着改变你说的话,但还是有错误。也许我的bootstrap文件中有什么东西…我已经用bootstrap文件的完整代码编辑了我的答案。如果我指的是所有的作品,我试着改变你说的,但仍然得到了错误。也许我的bootstrap文件中有什么东西…我已经用bootstrap文件的完整代码编辑了我的答案。如果我指的是所有作品。请将您的解决方案发布为答案,而不是问题的编辑。请将您的解决方案发布为答案,而不是问题的编辑。