4

如何加载外部站点模块?我有一个公共模块需要在不同的 Yii2 站点中加载,例如高级模板,我的想法是有一个公共目录来存储我可以加载到每个站点的通用模块。文件系统结构可以是这样的: / site-1/ (loads modules from common-modules dir for site-1) site-2/ (loads modules from common-modules dir for site-2) common_sites_modules/ module-1/ module-2/ carrello/ Carrello.php

他的配置中的每个站点都必须从加载模块common-modules/ 是否有可能实现这种结构?

编辑 1

配置:

'cart' => [ 'class' => dirname(dirname(dirname(__DIR__))) . '/common_sites_modules/carrello/Carrello', 'params' =>[ ... ], 'components' => [ ... ], ],

这是 Carrello.php 类的第一行:

<?php namespace common_sites_modules\carrello; ...

编辑器的顶部栏,带有类的路径和 Yii 返回的错误: 崇高的顶栏

在此处输入图像描述

编辑2:

感谢@Yupik 的支持和建议,新设置:

引导程序.php:

Yii::setAlias('@common-modules', dirname(dirname(dirname(__DIR__))) . '/common_sites_modules');

主要本地.php:

'class' => '@common-modules\carrello\Carrello',

生成的错误:

在此处输入图像描述

就像评论中建议的那样,解决方案是声明一个别名,然后使用别名的名称来调用模块。就像@Yupik 建议的那样,我在 common/config/bootstrap.php 中设置了一个别名,如下所示:

Yii::setAlias('@common_modules', dirname(dirname(dirname(__DIR__))) . '/common_modules');

在主要配置中:

'carrello' => [ 'class' => ''common_modules\carrello\Carrello', ... ]

显然,必须根据文件系统上的位置配置命名空间。感谢您的建议

4

1 回答 1

0

是的,我们可以通过在两个站点文件夹(site1、site2)中创建 common_sites_modules目录的符号链接来做到这一点。

于 2021-12-03T07:19:18.373 回答