我正在使用本教程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路由器代码放在配置树之外,如前所述?模块中的哪个位置应该是这样的路由器文件?
在模块module.config.php
文件夹中的config/
旁边,创建一个routes.config.php
是很常见的。
我通过与user.routes.config.php
做roles.routes.config.php
这样的事情进一步分裂。可能你会喜欢与front.routes.config.php
的admin.routes.config.php
。
最后,这取决于你。对于同事和未来的理智,请确保您始终如一地做到这一点。
作为示例,我的项目中的用户模块的配置:
它是一个直接处理用户相关内容的模块,所以它就在那里。应该把它拆分得更多,但就目前而言,这是不必要的。
然后在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',
],
],
];
}
}
请记住,项目中的最终实施取决于您。但是,制定标准并坚持下去。如果你到处都有不同的标准,你会发疯的。