Zend框架3路由器在单独的文件中(不在配置数组树中)

问题描述 投票:0回答:1

我正在使用本教程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路由器代码放在配置树之外,如前所述?模块中的哪个位置应该是这样的路由器文件?

zend-framework3 zend-router
1个回答
1
投票

在模块module.config.php文件夹中的config/旁边,创建一个routes.config.php是很常见的。

我通过与user.routes.config.phproles.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',
                ],
            ],
        ];
    }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.