エントリー
Habrの記事で、さまざまな環境をモジュールに変換し、プロジェクト内にきれいに配置する方法を見ました。 私の同僚が私に見せてくれたアイデアは、もっとクールで便利だと思います!
- アイデアは、コードで/サイト/サイト/インデックスを記述しないということです。
- 仮想ホスト、sim-link、revitesのセットアップに苦しむことはありません。すべて同じファイルを投入します。
- 「1サイト」オプションの料金を支払うことにより、(理論上)ホスティングに任意の数のドメインを設定できます!
クールじゃないですか?!
PS:はい、そしてところで、初心者の喜び:あなたは、「前面と背面の共通アップロードを作成する方法」の問題を解決できます。
PPS: YII2 Advancedを既にインストールしてテストし、このオプションが必要な理由を理解していることを願っています。
面白い? それではどうぞ たとえば、現在の最新バージョンである2.0.10を使用します。
リファクタリングに進む:最初のステップ
- 作業中のプロジェクトの革命を楽しみにしている場合は、プロジェクトのフォルダ「tar -cf saveAndProtect.tar ./」をクリックしてください。または、簡単に言うと、最新の作業バージョンをバックアップすることで保護しています。 ビューが1つだけのクリーンバージョンがあります。
- 上記のスクリーンショットで見たように、必要なアプリケーションをプロジェクトのルートのappsフォルダーに入れます(はい、自分で作成する必要があります)。
- ルートでWebフォルダーを作成し、フロントエンド(フロントエンド)のコンテンツをそこにスローします。 バックエンドフォルダーで、Webフォルダーを削除します。これで共有されます。 個人的には、ここでは画像とフォントの静的なもののみを保存します。 スタイルとJSは頻繁に変更されるため、アセットを使用する方が適切です。
- ここで、プロジェクトのルートにある新しいWebフォルダーにドメインを再構成し、より複雑な操作に進みます。
ステップ2:ファイルで少し仕上げる
- autoload、Yii、およびcommon / bootstrapが接続されているindex.phpの最初の3つのインクルード(インクルード)を修正します。それぞれ1つのレベルを削除します。 最後のインクルージョンをまだ接続できません。なぜなら これはブートストラップで、 appsフォルダーの特定のアプリケーションを参照します。
- アプリケーションを区別するために、始めに$ _SERVER ['HTTP_HOST']を使います。 switch-caseを作成し、最後のincludeをこのコードで置き換え、index.phpで完了します。 次のようになります。
// APP switch ($_SERVER['HTTP_HOST']) { case 'frontend.dev': case 'site.ru': define('YII_APP', 'frontend'); break; case 'backend.dev': case 'admin.site.ru': define('YII_APP', 'backend'); break; default: // 301 exit("domain not defined"); } // define('YII_APP_DIR', Yii::getAlias('@apps') . '/' . YII_APP); require(YII_APP_DIR . '/config/bootstrap.php');
- 新しいエイリアス(エイリアス) @appsが追加されていることに気付くかもしれません。これは単なる新しいフォルダーです。 定数YII_APPは、接続する必要がある特定のアプリケーションフォルダーです。 すべてが透明です! 見た目は-ええ、はい、私は同意します:それは少し「不器用」かもしれません。 しかし、クイックスタートに必要なものだけです。
- マージ設定には、まだ古い方法があります。 あるケースでは、インクルージョンをレベルに下げ、2番目では-新しい定数を使用します:
$config = yii\helpers\ArrayHelper::merge( require(__DIR__ . '/../common/config/main.php'), require(__DIR__ . '/../common/config/main-local.php'), require(YII_APP_DIR . '/config/main.php'), require(YII_APP_DIR . '/config/main-local.php') );
- ここで、エイリアス@appsを特定し、既存のエイリアスを修正します。 これは3番目のインクルードファイルで修正されています: common \ config \ bootstrap.php
エイリアスを追加: Yii :: setAlias( '@ apps'、dirname(dirname(__ DIR__))。 '/ Apps');
Yii :: setAlias( '@ console'、Yii :: getAlias( '@ apps')。 '/ Console');という原則でアプリケーションを編集します。 。
- そして最後: コンソールを設定することは残っています。 あなたは、スポーツの興味から自分でそれを行うことができます。 または、スポイラーを開いて既製のソリューションを取得できます。
Yii2のコンソール部分の構成./yii.php
#!/usr/bin/env php <?php defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); define('YII_APP', 'console'); require(__DIR__ . '/vendor/autoload.php'); require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); require(__DIR__ . '/common/config/bootstrap.php'); require(__DIR__ . '/apps/console/config/bootstrap.php'); $config = yii\helpers\ArrayHelper::merge( require(__DIR__ . '/common/config/main.php'), require(__DIR__ . '/common/config/main-local.php'), require(__DIR__ . '/apps/console/config/main.php'), require(__DIR__ . '/apps/console/config/main-local.php') ); $application = new yii\console\Application($config); $exitCode = $application->run(); exit($exitCode);
apps \ console \ config \ main.phpパッチをマージして編集します
$params = array_merge( require(__DIR__ . '/../../../common/config/params.php'), require(__DIR__ . '/../../../common/config/params-local.php'), require(__DIR__ . '/params.php'), require(__DIR__ . '/params-local.php') );
それだけです!
まとめ
YII2で少し作業した人のための非常に簡単な操作により、アプリケーションが構造化され、任意の数のドメインに応答し、1つのディレクトリしかない予算ホスティングに便利なプロジェクトを得ました。 または、ディレクトリとsimリンクを操作すると、特定の問題が発生します。
私の作品がおもしろいと思うことを願っています。 最後に、この珍しいアーキテクチャで発生する可能性のある質問のみを追加します。
Q:ステップXに白い画面があります!
A: Yiiを初期化する前にタイプミスをしました。 index.phpの最初に次の行を一時的に追加します。ini_set( "display_errors"、 "1"); ini_set( "error_reporting"、E_ALL);
Q:コンパイルされたアセットは混在できますか?
A:ありそうもない。 プロジェクトの作業のほぼ1年で、単一のケースは指摘されませんでした
Q:ロボットとファビコはドメインごとではなく、ヒープ内に混在していますか?
A: ApacheはいつでもRewriteCond%{HTTP_HOST}で書き換えることができます
Q:他のアプリケーションからリンクを取得するにはどうすればよいですか? 「モジュール」の例では、これは基本的なものです。
A:追加のコンポーネントとYiiを作成します:: $ app-> urlManagerFrontend-> createUrl(...);