所以我知道您可以在application.ini
中的Zend Framework中设置自定义默认操作:
resources.frontController.defaultAction = "something"
但是,如果我希望此默认操作取决于控制器,该怎么办?因此,控制器A
的默认操作为B
,控制器C
的默认操作为D
等,如何配置控制器以采用这些默认操作参数?需要哪些代码以及我应该放在哪里?
答案 0 :(得分:2)
您可以在Bootstrap.php中添加如下内容:
protected function _initRoutes()
{
$Router = Zend_Controller_Front::getInstance()->getRouter();
$Route = new Zend_Controller_Router_Route(
'/controller1',
array(
'action' => 'customaction1'
)
);
$Router->addRoute('c1', $Route);
$Route = new Zend_Controller_Router_Route(
'/controller2',
array(
'action' => 'customaction2'
)
);
$Router->addRoute('c2', $Route);
[...]
}
答案 1 :(得分:0)
处理大量路线的另一种方法可能是让控制器决定他想做什么:
public function indexAction() {
$this->_forward('mydefault');
}
public function mydefaultAction() {
$this->view->message = 'I get called on /controller/index';
}
我的GUESS,这种方法比添加几十个自定义路线更快。但这只是猜测,没有在这里测试过。
答案 2 :(得分:-2)
默认情况下,您只能说一般控制器的默认操作是什么。如果要在特定URI下调度某个控制器和操作,可以使用routes执行此操作。
您现在可能在应用程序中使用了默认路由。您可以从application.ini添加其他路由,或者创建frontController插件以将路由注入路由器。前者更容易,后者为您提供更多功能,例如根据数据库中的条目加载路由。
在ZF的manual中很好地解释了application.ini中的路由。它归结为每条路线的这四条线:
resources.router.routes.route_id.route = "/login"
resources.router.routes.route_id.defaults.module = "user"
resources.router.routes.route_id.defaults.controller = "login"
resources.router.routes.route_id.defaults.action = "index"
此处可以通过defaults.action
指定默认操作。对于路线中的参数,关于Zend_Controller_Router_Route type的部分很好地解释了它。
另一个选项是frontController插件。这个类可以挂钩到进程的不同部分,如果使用正确,这个系统非常强大。您的问题可能不是必需的,但您可能需要查看有page about plugins的手册和load these plugins in your application.ini的部分。