アドバンストアプリケーションテンプレート

Note|注意: この節はまだ執筆中です。

このテンプレートは、チームによって開発される大規模なプロジェクトのためのもので、バックエンドはフロントエンドから分離され、アプリケーションは複数のサーバに配備されます。 また、このアプリケーションテンプレートは機能に関して少し大きく踏み込んで、不可欠なデータベースやユーザ登録、パスワード回復などをそのまま使える形で提供しています。

次の表はアドバンストとベーシックのアプリケーションテンプレートの違いを比較するものです。

機能 ベーシック アドバンスト
プロジェクト構造
Site コントローラ
ユーザのログイン/ログアウト
フォーム
DB 接続
コンソールコマンド
アセットバンドル
Codeception によるテスト
Twitter Bootstrap
フロントエンドとバックエンド
すぐに使える User モデル
ユーザの登録とパスワード回復

インストール

Composer によってインストールする

Composer を持っていない場合は、Yii をインストールする の節の指示に従ってインストールしてください。

Composer がインストールされていれば、次のコマンドを使ってアプリケーションをインストールすることが出来ます。

composer global require "fxp/composer-asset-plugin:1.0.0"
composer create-project --prefer-dist yiisoft/yii2-app-advanced yii-application

最初のコマンドは composer asset plugin をインストールします。 これにより、Composer を通じて bower と npm の依存パッケージを管理することが出来るようになります。 このコマンドは全体で一度だけ走らせれば十分です。 第二のコマンドは yii-application という名前のディレクトリにアドバンストアプリケーションをインストールします。 望むなら別のディレクトリ名を選ぶことも出来ます。

始めよう

アプリケーションをインストールした後に、インストールされたアプリケーションの初期設定をするために、次の各ステップを実行しなければなりません。 これらは全体で一度だけやれば十分です。

  1. init コマンドを実行して、環境として dev を選択します。

    php /path/to/yii-application/init

    非対話モードを使っても構いません。本番環境であれば、

    php /path/to/yii-application/init --env=Production --overwrite=All

  2. 新しいデータベースを作成し、それに従って common/config/main-local.phpcomponents['db'] の構成情報を修正します。

  3. コンソールコマンド yii migrate でマイグレーションを適用します。
  4. ウェブサーバのドキュメントルートを設定します。

  5. フロントエンドのパスは /path/to/yii-application/frontend/web/、URL は http://frontend/ を使用

  6. バックエンドのパスは /path/to/yii-application/backend/web/、URL は http://backend/ を使用

アプリケーションにログインするためには、最初にユーザ登録をする必要があります。 メールアドレス、ユーザ名、パスワードは何でも構いません。 そうすれば、同じメールアドレスとパスワードを使って何時でもアプリケーションにログインすることが出来ます。

ディレクトリ構造

ルートディレクトリは次のサブディレクトリを含みます。

  • backend - バックエンドのウェブアプリケーション
  • common - 全てのアプリケーションに共通なファイル
  • console - コンソールアプリケーション
  • environments - 環境設定
  • frontend - フロントエンドのアプリケーション

ルートディレクトリは次の一連のファイルを含みます。

  • .gitignore - git バージョン管理システムによって無視されるディレクトリの一覧を含みます。 ソースコードのレポジトリに決して入れたくないものがあれば、それをこれに追加してください。
  • composer.json - Composer の構成。下の「Composer を構成する」で説明します。
  • init - 初期化スクリプト。下の「構成情報と環境」で説明します。
  • init.bat - 同上 (Windows 用)。
  • LICENSE.md - ライセンス情報。プロジェクトのライセンスを置きます。特にオープンソースにする場合は。
  • README.md - テンプレートのインストールに関する基本的な情報。 あなたのプロジェクトとそのインストールに関する情報に置き換えることを検討してください。
  • requirements.php - Yii 必要条件チェッカ。
  • yii - コンソールアプリケーションのブートストラップスクリプト。
  • yii.bat - 同上 (Windows 用)。

事前定義されたパスエイリアス

  • @yii - フレームワークのディレクトリ。
  • @app - 現在走っているアプリケーションのベースパス。
  • @common - 共通ディレクトリ。
  • @frontend - フロントエンドウェブアプリケーションのディレクトリ。
  • @backend - バックエンドウェブアプリケーションのディレクトリ。
  • @console - コンソールアプリケーションのディレクトリ。
  • @runtime - 現在走っているウェブアプリケーションのランタイムディレクトリ。
  • @vendor - Composer の ベンダーディレクトリ。
  • @bower - bower パッケージ を含むベンダーディレクトリ。
  • @npm - npm パッケージ を含むベンダーディレクトリ。
  • @web - 現在走っているウェブアプリケーションのベース URL。
  • @webroot - 現在走っているウェブアプリケーションのウェブルートディレクトリ。

アドバンストアプリケーションのディレクトリ構造特有のエイリアス (@common@frontend@backend@console) は common/config/bootstrap.php で定義されています。

アプリケーション

アドバンストテンプレートには三つのアプリケーションがあります。 すなわち、フロントエンド、バックエンド、そして、コンソールです。 フロントエンドは典型的にはエンドユーザに提示されるもので、プロジェクトの本体です。 バックエンドは管理パネルや、分析などの機能です。 コンソールは典型的にはクロンジョブや低レベルのサーバ管理に使用されます。 コンソールは、また、アプリケーションの配置の際にも使われ、マイグレーションやアセットを処理します。

さらに、二つ以上のアプリケーションから使われるファイルを含む common ディレクトリがあります。 例えば、User モデルがそうです。

フロントエンドとバックエンドは両方ともウェブアプリケーションであり、ともに web ディレクトリを含んでいます。 これがウェブサーバのウェブルートとすべきディレクトリです。

各アプリケーションはそれ自身の名前空間と、その名前に対応するエイリアスをもっています。 同じことは common ディレクトリにも当てはまります。

構成情報と環境

構成情報に対する典型的なアプローチには、複数の問題があります。

  • チームの各メンバーは、自分自身の構成オプションを持っています。 そのような構成をコミットすると、他のメンバーに影響を与えます。
  • 本番のデータベースのパスワードと API キーは、レポジトリに入れるべきではありません。
  • 複数サーバの環境があります。すなわち、開発、テスト、本番などです。各サーバはそれ自身の構成情報を持たなければなりません。
  • 全ての構成オプションを各ケースに対して定義することは反復の多い作業であり、保守するのに時間を取りすぎます。

これらの問題を解決するために、Yii は環境という単純な概念を導入しています。 それぞれの環境は environments ディレクトリ配下の一連のファイルとして表現されます。 init コマンドが環境を切り替えるのに使用されます。 init コマンドが実際にやっていることは、環境ディレクトリから、全てのアプリケーションがあるルートディレクトリへと、すべてをごっそりとコピーすることです。

デフォルトでは二つの環境があります。すなわち、devprod です。 最初のものは開発用の環境で、全ての開発ツールとデバッグが有効になっています。 第二のものは本番サーバ配備用の環境で、デバッグと開発ツールは無効になっています。

典型的には、環境ディレクトリは index.php のようなアプリケーションブートストラップファイルや、-local.php という接尾辞を持つ構成情報ファイルを含んでいます。 これらは .gitignore に追加されて、ソースコードレポジトリには決して追加されないようになっています。

重複を避けるために、構成情報はお互いを上書きします。 例えば、フロントエンドは次の順序で構成情報を読み取ります。

  • common/config/main.php
  • common/config/main-local.php
  • frontend/config/main.php
  • frontend/config/main-local.php

パラメータは次の順序で読まれます。

  • common/config/params.php
  • common/config/params-local.php
  • frontend/config/params.php
  • frontend/config/params-local.php

後の構成情報ファイルが先のものを上書きするわけです。

全体の枠組みはこのようになります。

アドバンストアプリケーションの構成情報

Composer を構成する

アプリケーションテンプレートがインストールされた後に、ルートディレクトリにあるデフォルトの composer.json を修正するのは良い考えです。

{
    "name": "yiisoft/yii2-app-advanced",
    "description": "Yii 2 Advanced Application Template",
    "keywords": ["yii2", "framework", "advanced", "application template"],
    "homepage": "http://www.yiiframework.com/",
    "type": "project",
    "license": "BSD-3-Clause",
    "support": {
        "issues": "https://github.com/yiisoft/yii2/issues?state=open",
        "forum": "http://www.yiiframework.com/forum/",
        "wiki": "http://www.yiiframework.com/wiki/",
        "irc": "irc://irc.freenode.net/yii",
        "source": "https://github.com/yiisoft/yii2"
    },
    "minimum-stability": "dev",
    "require": {
        "php": ">=5.4.0",
        "yiisoft/yii2": "*",
        "yiisoft/yii2-bootstrap": "*",
        "yiisoft/yii2-swiftmailer": "*"
    },
    "require-dev": {
        "yiisoft/yii2-codeception": "*",
        "yiisoft/yii2-debug": "*",
        "yiisoft/yii2-gii": "*",
        "yiisoft/yii2-faker": "*"
    },
    "config": {
        "process-timeout": 1800
    },
    "extra": {
        "asset-installer-paths": {
            "npm-asset-library": "vendor/npm",
            "bower-asset-library": "vendor/bower"
        }
    }
}

最初に、基本的な情報を更新しましょう。 namedescriptionkeywordshomepage および support をあなたのプロジェクトに会うように変更します。

次に興味深い部分です。 あなたは、あなたのアプリケーションが必要とするパッケージを require セクションに追加することが出来ます。 追加のパッケージは全て packagist.org から取ってくることが出来ます。ウェブサイトを閲覧して、役に立つコードを探してください。

composer.json を修正した後、composer update --prefer-dist を実行し、パッケージがダウンロードされインストールされるのを待ちます。 後はただ使用するだけです。クラスのオートロードは自動的に処理されます。

バックエンドからフロントエンドにリンクを張る

バックエンドアプリケーションからフロントエンドアプリケーションにリンクを張らなければならないことがよくあります。 フロントエンドアプリケーションはそれ自身の URL マネージャ規則を持っている場合がありますので、それをバックエンドアプリケーションのために別の名前で複製する必要があります。

return [
    'components' => [
        'urlManager' => [
            // ここに通常のバックエンドの URL マネージャの構成
        ],
        'urlManagerFrontend' => [
            // ここにフロントエンドの URL マネージャの構成
        ],

    ],
];

このようにすると、フロントエンドを指す URL を次のようにして取得することが出来ます。

echo Yii::$app->urlManagerFrontend->createUrl(...);