如何删除zend框架URL中的操作部分

时间:2013-01-26 07:51:50

标签: php zend-framework url

我正在使用zend框架,我的网址是这样的:

http://target.net/reward/index/year/2012/month/11

网址显示我在奖励控制器和索引操作中。其余的是我的参数。问题是我在整个程序中使用索引操作,我想从URL中删除该部分使它像这样:

http://target.net/reward/year/2012/month/11

但是年份部分与行动部分有误。有什么办法吗?!!! 提前致谢

2 个答案:

答案 0 :(得分:4)

看看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应匹配的格式。以冒号:开头的单词是变量。之后,您可以定义默认值和参数的任何要求。

答案 1 :(得分:0)

您可以使用controller_plugin来控制网址 如你所愿创建一个插件文件(/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);
        }
    }
}