1

我有 ZF 1,在那里我使用 Bootstrap.php 工作,其中包含大量路由和其他 preDispatch 内容。

但是在 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);
  }
4

1 回答 1

0

ZF2 的最佳功能之一是我一开始实际上讨厌的东西,那就是路线。这既很棒烦人,因为现在您需要为所有模块设置路由。

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

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

也就是说,您不再需要“引导”您的路线,因为这是您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);

onBootstrap()如果您使用骨架应用程序,您应该能够将其添加为服务或将其放入应用程序模块中。

请记住,这是他们的例子,而且我不是这方面的专家。这是更多信息。

希望这可以帮助!

于 2012-10-22T09:07:20.890 回答