如何在Zend Framework 2中创建通用模块/控制器/动作路由?

Mat*_*ari 2 php zend-framework-modules zend-framework2

我想在Zend Framework 2中创建一个与ZF2 MVC架构一起使用的通用模块/控制器/动作路由.

在ZF1中,默认路由被定义为/[:module][/:controller][/:action]模块默认为default,控制器默认为index和操作index.

现在,ZF2改变了模块的用途,从简单的控制器和视图组到真正的独立应用程序,并将控制器名称显式映射到控制器类.

由于所有控制器名称在所有模块中必须是唯一的,因此我想将它们命名为,modulename-controllername但我希望URL看起来像/modulename/controllername不需要为每个模块创建特定路由,使用类似于上述ZF1的旧默认路由.

sup*_*bie 8

是的,这是非常可能的,但你必须做一些工作.使用以下配置:

        'default' => array(
            'type'    => 'My\Route\Matcher',
            'options' => array(
                'route'    => '/[:module][/:controller[/:action]]',
                'constraints' => array(
                    'module' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                ),
                'defaults' => array(
                    'module'     => 'default',
                    'controller' => 'index',
                    'action'     => 'index',
                ),
            ),
        ),
Run Code Online (Sandbox Code Playgroud)

然后你必须自己编写My\Route\Matcher一个MVC可以使用的Routemap对象.这并不难,看看框架中已有的其他路线,你就会明白这一点.