2017-07-18 113 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