Php 如何删除zend framework URL中的操作部分

Php 如何删除zend framework URL中的操作部分,php,zend-framework,url,Php,Zend Framework,Url,我正在使用zend framework,我的URL如下: http://target.net/reward/index/year/2012/month/11 url显示我处于奖励控制器和索引操作中。其余是我的参数。问题是我在整个程序中使用索引操作,我想从url中删除该部分,使其如下所示: http://target.net/reward/year/2012/month/11 但是年度部分和行动部分是错误的。有什么办法吗?!!! 提前感谢看一看。使用routes,您可以将任何URL格式重定向到

我正在使用zend framework,我的URL如下:

http://target.net/reward/index/year/2012/month/11
url显示我处于奖励控制器和索引操作中。其余是我的参数。问题是我在整个程序中使用索引操作,我想从url中删除该部分,使其如下所示:

http://target.net/reward/year/2012/month/11
但是年度部分和行动部分是错误的。有什么办法吗?!!! 提前感谢

看一看。使用routes,您可以将任何URL格式重定向到指定的控制器/操作。例如,在
.ini
配置文件中,这将执行您想要的操作:

routes.myroute.route = "reward/year/:myyear/month/:mymonth"
routes.myroute.defaults.controller = reward
routes.myroute.defaults.action = index
routes.myroute.defaults.myyear = 2012
routes.myroute.defaults.mymonth = 11
routes.myroute.reqs.myyear = "\d+"
routes.myroute.reqs.mymonth = "\d+"
首先定义URL应匹配的格式。以冒号开头的单词
是变量。然后定义默认值和对参数的任何要求。

查看。使用routes,您可以将任何URL格式重定向到指定的控制器/操作。例如,在
.ini
配置文件中,这将执行您想要的操作:

routes.myroute.route = "reward/year/:myyear/month/:mymonth"
routes.myroute.defaults.controller = reward
routes.myroute.defaults.action = index
routes.myroute.defaults.myyear = 2012
routes.myroute.defaults.mymonth = 11
routes.myroute.reqs.myyear = "\d+"
routes.myroute.reqs.mymonth = "\d+"

首先定义URL应匹配的格式。以冒号开头的单词
是变量。然后定义默认值和对参数的任何要求。

您可以使用控制器插件来控制url。
根据需要创建插件文件(/library/plugins/controllers/myplugin.php)。
然后使用preDispatch()方法,您可以获取请求的url元素,然后为控制器自定义这些元素。
myplugin.php

class plugins_controllers_pages extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $int = 0;
        $params = $this->getRequest()->getParams();  
        if($params['action'] != 'index' ) AND !$int)
        {
             $int++;
             $request->setControllerName($params['controller']);
             $request->setActionName('index');
             $request->setParams(array('parameter' => $params['action']));
             $this->postDispatch($request);
        }
    }
}

您可以使用控制器插件来控制url。
根据需要创建插件文件(/library/plugins/controllers/myplugin.php)。
然后使用preDispatch()方法,您可以获取请求的url元素,然后为控制器自定义这些元素。
myplugin.php

class plugins_controllers_pages extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $int = 0;
        $params = $this->getRequest()->getParams();  
        if($params['action'] != 'index' ) AND !$int)
        {
             $int++;
             $request->setControllerName($params['controller']);
             $request->setActionName('index');
             $request->setParams(array('parameter' => $params['action']));
             $this->postDispatch($request);
        }
    }
}

这是到的链接,但我对如何按照您请求的方式配置路由知之甚少。这是可能的,应该不会很困难,因为有到的链接,但我对如何按照您请求的方式配置路由知之甚少。这是可能的,应该不会很困难,你必须为所有你想删除'index'@tasmaniski的页面设置自定义路由。路由器尝试将当前URL与您定义的任何路由匹配。如果未找到匹配项,将使用“正常”的URL路由方式。@Abadis确认答案您必须为所有要删除“索引”的页面设置自定义路由@tasmaniski。路由器尝试将当前URL与您定义的任何路由匹配。如果未找到匹配项,将使用“正常”的URL路由方式。@Abadis确认答案