2017-07-18 133 views
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.phpYii2加载模块

每个站点都在他的配置必须从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: Sublime top bar

enter image description here

编辑2:

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

bootstrap.php中:

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

ma在-local.php:

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

产生的错误:

enter image description here

提出类似的意见,解决办法是宣布一个别名,然后调用使用别名的名称模块。像由@Yupik建议我在公共/配置设置/ bootstrap.php中的别名如下:

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

在主要配置:

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

显然命名空间有根据文件系统上的位置进行配置。 感谢您的建议

+0

是的,这是可能的。 – Yupik

+0

好吧,但我有一些问题,加载模块,在配置的类'参数我设置模块的绝对路径,但每次我收到'类/ var/www/html/common_sites_modules /我的模块/ MyClass不当用路径生成新的ReflectionClass对象时,存在异常,路径是否正确,为什么这个异常? – MarBer

+0

由于你做错了事,分享代码,否则我们无法帮助你。 – Yupik

回答

-1

可以通过使用高级模板并配置多个应用程序环境(Documentation),然后在常用文件夹上放置共享模块并在其他环境中使用它们。

+0

问题是在不同的网站(基本或高级模板)中使用该模块,在前端和后端的相同网站的部分之间共享很容易,特别是使用高级模板。 – MarBer

+0

您可以使用完全分离的每个应用程序,例如使用site1作为具有不同数据库的文件夹,使用不同数据库的site2等。即使你可以在'/ var/yii'之类的地方安装高级基地,并且可以像'/ var/http/site1','/ var/http/site2'那样将你的应用程序安置在某处。你把你的通用模块放在commons上,并在你想要的地方使用它们。打破高级模板的刻板印象,并根据您的需要使用它。 – meysam

+0

您附加的链接解释了如何使用高级模板为同一应用程序添加应用程序的某些逻辑分区,例如可以是前端和后端。我知道这也可以通过独特的高级应用程序完成,但我认为更正确的做法是将每个工作区的所有站点/应用程序分隔开,每个人都有一个Yii2安装,如同您在我的问题中看到的那样 – MarBer