我正在使用 zend 框架,我的网址是这样的:
http://target.net/reward/index/year/2012/month/11
url 显示我在奖励控制器和索引操作中。其余的是我的参数。问题是我在整个程序中使用索引操作,我想从 URL 中删除该部分以使其像这样:
http://target.net/reward/year/2012/month/11
但是年份部分被误认为是动作部分。有什么办法吗?!!!提前致谢
我正在使用 zend 框架,我的网址是这样的:
http://target.net/reward/index/year/2012/month/11
url 显示我在奖励控制器和索引操作中。其余的是我的参数。问题是我在整个程序中使用索引操作,我想从 URL 中删除该部分以使其像这样:
http://target.net/reward/year/2012/month/11
但是年份部分被误认为是动作部分。有什么办法吗?!!!提前致谢
看看路线。使用路由,您可以将任何 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 应匹配的格式。以冒号开头的词:
是变量。之后,您定义默认值和对参数的任何要求。
您可以使用 controller_plugin 来控制 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);
}
}
}