2017-07-18 6 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によって提案されたように私は、共通の/ configに/ bootstrap.phpの次のようにエイリアスに設定しました:主要な構成で

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

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

明らか

名前空間がする必要はありファイルシステム上の位置に基づいて構成することができます。 アドバイスありがとう

+0

はい、可能です。 – Yupik

+0

しかし、私はモジュールの絶対パスを設定する 'class'パラメータでモジュールを読み込むのにいくつか問題がありますが、' Class/var/www/html/common_sites_modules/my-module/MyClassは受け取りません新しいReflectionClassオブジェクトがパスで生成されたときに 'exists'例外が発生しました。パスは正しいので、なぜこの例外が発生しますか? – MarBer

+0

あなたは何か間違ったことをしているので、コードを共有しないと、私たちはあなたを助けることができません。 – Yupik

答えて

-1

これは、高度なテンプレートを使用して複数のアプリケーション環境(Documentation)を構成し、共有フォルダに共有モジュールを配置して他の環境で使用することで行うことができます。

+0

問題は、別々のサイト(ベースまたはアドバンストテンプレート)でモジュールを使用することです。フロントエンドとバックエンドのような同じサイトの部分間での共有は、特に高度なテンプレートを使用すると簡単です。 – MarBer

+0

各アプリケーションを完全に分離して使用することができます。 site1は別個のdbを持つフォルダとして使用し、site2は別個のdbなどを使用します。あなたは '/ var/yii'のような先進的な基盤をインストールして、'/var/http/site1'、 '/ var/http/site2'のような場所にアプリケーションを作ることができます。共通モジュールを 'commons'に置き、あなたが望むところでそれらを使います。高度なテンプレートについてのステレオタイプを壊し、必要に応じて使用してください。 – meysam

+0

あなたがあなたの答えに添付するリンクは、高度なテンプレートを使って、同じアプリケーションのフロントエンドとバックエンドのような、アプリケーションのロジックパーティションを追加する方法を説明しています。私はこれも独自の高度なアプリケーションの下で別個のサイトで行うことができることを理解していますが、自分のワークスペースを持つすべてのサイト/アプリケーション、1つのYii2をインストールしたすべての人が私の質問でわかるように – MarBer