基于控制器更改zend框架默认操作

时间:2011-10-24 00:50:50

标签: php zend-framework

所以我知道您可以在application.ini中的Zend Framework中设置自定义默认操作:

resources.frontController.defaultAction = "something"

但是,如果我希望此默认操作取决于控制器,该怎么办?因此,控制器A的默认操作为B,控制器C的默认操作为D等,如何配置控制器以采用这些默认操作参数?需要哪些代码以及我应该放在哪里?

3 个答案:

答案 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的部分。