Zend Framework 3路由器位于单独的文件中(不在配置阵列树中)

时间:2019-04-17 13:29:57

标签: zend-framework3 zend-router

我正在使用本教程https://docs.zendframework.com/tutorials/getting-started/overview/创建相册模块。这个对我有用。

在项目内部,有/module/Album/config/module.config.php文件,其中包含路由。路由器位于阵列树内。如我以前的经验所示,将来每个项目(甚至每个模块)可以拥有数十条路线。

在此文档页面https://docs.zendframework.com/zend-router/routing/上,我找到了将路由器添加到模块的另一种方法。

// One at a time:
$route = Literal::factory([
    'route' => '/foo',
    'defaults' => [
        'controller' => 'foo-index',
        'action'     => 'index',
    ],
]);
$router->addRoute('foo', $route);

与将路由存储在非常深的配置数组树中相比,这种方法对我来说更受欢迎。

所以,我的问题是:如前所述,我可以在哪里将php路由器代码放在配置树之外?这样的路由器文件应该在模块中的什么位置?

1 个答案:

答案 0 :(得分:1)

在模块module.config.php文件夹中config/旁边,通常创建一个routes.config.php

我通过对user.routes.config.php做类似roles.routes.config.php的事情来进一步拆分它。您可能希望将front.routes.config.phpadmin.routes.config.php一起使用。

最后由您决定。为了同事和未来的理智,请确保始终如一。


例如,我的项目中用户模块的配置:

config files

这是一个模块,可以处理与用户直接相关的所有内容,因此就在其中。应该将其拆分成更多部分,但就目前而言,这是不必要的。

然后您将在Module.php中加载所有此配置:

use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;

class Module implements ConfigProviderInterface, AutoloaderProviderInterface
{

    /**
     * @return array
     */
    public function getConfig()
    {
        $config = [];

        $path = __DIR__
            . DIRECTORY_SEPARATOR . '..'
            . DIRECTORY_SEPARATOR . 'config'
            . DIRECTORY_SEPARATOR . '*.php';

        foreach (glob($path) as $filename) {
            $config = array_merge_recursive($config, include $filename);
        }

        return $config;
    }

    /**
     * @return array
     */
    public function getAutoloaderConfig()
    {
        return [
            'Zend\Loader\StandardAutoloader' => [
                'namespaces' => [
                    __NAMESPACE__ => __DIR__ . DIRECTORY_SEPARATOR . 'src',
                ],
            ],
        ];
    }
}

请记住,最终的实施取决于您自己。但是,制定一个标准并坚持下去。如果您到处都有不同的标准,您会发疯。