ZendFramework 2 - 如何在ZF1中执行类似的Bootstrap.php?

时间:2012-10-22 08:56:40

标签: php zend-framework zend-framework2 zend-route zend-router

我有ZF 1,我使用了很多路由和其他preDispatch工作的Bootstrap.php。

但是在ZF2中,没有Bootstrap.php概念了吗?或者我的意思是我如何在Zf2中做同样的事情?

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

  protected function _initPdispatch() {
    $this->bootstrap('frontController');
    require_once APPLICATION_PATH . '/controllers/plugin/LanguageSelector.php';
    $plugin = new LanguageSelector();
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin($plugin);
    return $plugin;
  }

  protected function _initRoutes() {
    $front = Zend_Controller_Front::getInstance();
    $router = $front->getRouter();
    $dynamic1 = new Zend_Controller_Router_Route(
                    '/:variable1',
                    array(
                        'controller' => 'router',
                    ),
//              array('variable1' => '^[a-zA-Z0-9_-]*$')
                    array('variable1' => '^[\w.-]*$')
    );
    $router->addRoute('dynamic1', $dynamic1);
  }

1 个答案:

答案 0 :(得分:1)

ZF2的最佳功能之一是我实际上非常讨厌,这些是路线。这很好很烦人,因为现在你需要 来设置所有模块的路由。

理解ZF2(更快)的一部分是理解模块。如果你能超越这个,你将开始更快地适应。 (至少那对我来说是这样的)。那么,ZF2中的模块是什么?什么!

无论如何,每个模块和应用程序的所有配置文件最终都会在Zend Framework中合并,这意味着您可以在任何地方定义路由。

也就是说,您不再需要“引导”您的路由,因为这是您的ModuleName/config/module.config.php文件的一部分。现在

现在,我不是ZF2中正则表达式路线的专家,但它会是这样的:

// MyModule/config/module.config.php
return array(
    'router' => array(
        'routes' => array(
            'dynamic1' => array(
                'type' => 'regex',
                'options' => array(
                    'route' => '/[:variable1]'
                )
            )
        )
    )
);

在那里你定义正则表达式。另外,我在他们的文档中看到,您还可以手动定义正则表达式路径:

use Zend\Mvc\Router\Http\Regex;

// ...

$route = Regex::factory(array(
    'regex' => '/blog/(?<id>[a-zA-Z0-9_-]+)(\.(?<format>(json|html|xml|rss)))?',
    'defaults' => array(
        'controller' => 'Application\Controller\BlogController',
        'action'     => 'view',
        'format'     => 'html',
    ),
    'spec' => '/blog/%id%.%format%',
));

$router->addRoute($route);

如果您正在使用Skeleton应用程序,您应该能够将其作为服务添加或将其放在应用程序模块中的onBootstrap()中。

请记住,那是他们的示例,我再也不是这方面的专家。 Here is some more information.

希望这有帮助!