Zend Framework:在1.8+应用程序中创建自定义路由的方式和位置?

时间:2009-12-08 04:25:45

标签: zend-framework

我以前从未创建过自定义路线,但我最终需要一条路线。我的问题是:我如何创建自定义路线,我应该在哪里创建它?我正在使用Zend Framework 1.9.6。

4 个答案:

答案 0 :(得分:5)

我是这样做的。可能有更好的方法,但我认为这很简单:

# /application/Bootstrap.php
protected function _initSpecialRoutes()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();
    $router->addRoute(
        'verify', new Zend_Controller_Router_Route('verify/:token', array(
            'controller' => 'account',
            'action' => 'verify'))
    );
    $router->addRoute(
        'arbitrary-route-name', new Zend_Controller_Router_Route('special/route/:variablename', array(
            'controller' => 'defaultcontrollername',
            'action' => 'defaultactionname'))
    );
}

答案 1 :(得分:2)

这是我定义自定义路线的地方:

// in bootstrap
Zend_Controller_Front::getInstance()->registerPlugin( new Prontiso_Controller_Plugin_Routes() );

...

<?php
// Prontiso/Controller/Plugin/Routes.php
class Prontiso_Controller_Plugin_Routes extends Zend_Controller_Plugin_Abstract
{
  public function routeStartup( Zend_Controller_Request_Abstract $request )
  {
    Prontiso_Routes::addAll();
  }
}

...

<?php
// Prontiso/Routes.php
class Prontiso_Routes extends Zend_Controller_Plugin_Abstract
{
  public static function addAll()
  {
    $router = Zend_Controller_Front::getInstance()->getRouter();

    /**
     * Define routes from generic to specific.
     */

    /**
     * Example: Simple controller/action route, guaranteed to eliminate any extra URI parameters.
     */
    $router->addRoute(
      'barebones', new Zend_Controller_Router_Route(':controller/:action')
    );
  }
}

答案 2 :(得分:1)

有关具体方法,请参阅Router文档。我会在引导程序中制作你的路线。手动编程路线或加载配置文件。

答案 3 :(得分:1)

我知道@Andrew已经接受了答案,但是我想发布这个与他非常相似的方法,但我发现它更清洁了。

如果你深入了解Zend_Controller_Router_Rewrite,你会发现一个addRoutes()方法,它只迭代每个键和值并调用addRoute()。

所以这是我的解决方案:

# /application/Bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    protected function _initRoutes()
    {
        $router = Zend_Controller_Front::getInstance()->getRouter();

        $loginRoute = new Zend_Controller_Router_Route('login', array('controller' => 'auth', 'action' => 'login'));

        $logoutRoute = new Zend_Controller_Router_Route('logout', array('controller' => 'auth', 'action' => 'logout'));

        $routesArray = array('login' => $loginRoute, 'logout' => $logoutRoute);

        $router->addRoutes($routesArray);

    }
}