我有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);
}
答案 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.
希望这有帮助!