1フォロワー

Yiiをマイクロフレームワークとして使用する

Yiiは、基本テンプレートや高度なテンプレートに含まれる機能を使用せずに簡単に使用できます。つまり、Yiiは既にマイクロフレームワークです。Yiiを使用するために、テンプレートによって提供されるディレクトリ構造は必要ありません。

これは、アセットやビューなど、事前に定義されたテンプレートコードをすべて必要としない場合に特に便利です。そのようなケースの1つは、JSON APIの構築です。以降のセクションでは、その方法を示します。

Yiiのインストール

プロジェクトファイル用のディレクトリを作成し、作業ディレクトリをそのパスに変更します。例で使用されているコマンドはUnixベースですが、Windowsにも同様のコマンドが存在します。

mkdir micro-app
cd micro-app

注記:続行するには、Composerの知識が少し必要です。Composerの使い方をまだ知らない場合は、Composerガイドを読んでください。

好きなエディターを使用してmicro-appディレクトリの下にcomposer.jsonファイルを作成し、次を追加します。

{
    "require": {
        "yiisoft/yii2": "~2.0.0"
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
}

ファイルを保存し、composer installコマンドを実行します。これにより、すべての依存関係を含むフレームワークがインストールされます。

プロジェクト構造の作成

フレームワークをインストールしたら、アプリケーションのエントリポイントを作成します。エントリポイントは、アプリケーションを開こうとしたときに最初に実行されるファイルです。セキュリティ上の理由から、エントリポイントファイルを別のディレクトリに配置し、Webルートにすることをお勧めします。

webディレクトリを作成し、次の内容を含むindex.phpをその中に配置します。

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require __DIR__ . '/../config.php';
(new yii\web\Application($config))->run();

また、アプリケーションの設定をすべて含むconfig.phpというファイルも作成します。

<?php
return [
    'id' => 'micro-app',
    // the basePath of the application will be the `micro-app` directory
    'basePath' => __DIR__,
    // this is where the application will find all controllers
    'controllerNamespace' => 'micro\controllers',
    // set an alias to enable autoloading of classes from the 'micro' namespace
    'aliases' => [
        '@micro' => __DIR__,
    ],
];

情報:設定はindex.phpファイルに保持することもできますが、別々に持つことをお勧めします。こうすることで、以下に示すように、コンソールアプリケーションにも使用できます。

これでプロジェクトはコーディングの準備ができました。名前空間を遵守する限り、プロジェクトディレクトリ構造は自由に決めることができます。

最初のコントローラーの作成

controllersディレクトリを作成し、パス情報のないリクエストを処理するデフォルトのコントローラーであるSiteController.phpファイルを追加します。

<?php

namespace micro\controllers;

use yii\web\Controller;

class SiteController extends Controller
{
    public function actionIndex()
    {
        return 'Hello World!';
    }
}

このコントローラーに別の名前を使用する場合は、名前を変更し、それに応じてyii\base\Application::$defaultRouteを設定します。たとえば、DefaultControllerの場合は'defaultRoute' => 'default/index'となります。

この時点で、プロジェクト構造は次のようになります。

micro-app/
├── composer.json
├── config.php
├── web/
    └── index.php
└── controllers/
    └── SiteController.php

ウェブサーバーをまだ設定していない場合は、ウェブサーバー設定ファイルの例を参照することをお勧めします。別のオプションとして、PHP組み込みのウェブサーバーを使用する`yii serve`コマンドを使用できます。これは`micro-app/`ディレクトリから実行できます。

vendor/bin/yii serve --docroot=./web

ブラウザでアプリケーションのURLを開くと、「Hello World!」が表示されます。これは`SiteController::actionIndex()`で返されたものです。

情報: この例では、デフォルトのアプリケーション名前空間`app`を`micro`に変更して、(そう思っていた場合に備えて)その名前に縛られていないことを示しています。その後、コントローラーの名前空間を調整し、正しいエイリアスを設定しました。

REST APIの作成

"micro framework"の使用法を示すために、投稿のためのシンプルなREST APIを作成します。

このAPIがデータを提供するには、まずデータベースが必要です。アプリケーション設定にデータベース接続設定を追加します。

'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'sqlite:@micro/database.sqlite',
    ],
],

情報: ここでは簡潔にするためにsqliteデータベースを使用しています。その他のオプションについては、データベースガイドを参照してください。

次に、投稿テーブルを作成するためのデータベースマイグレーションを作成します。上記のように、別々の設定ファイルがあることを確認してください。以下のコンソールコマンドを実行する必要があります。以下のコマンドを実行すると、データベースマイグレーションファイルが作成され、マイグレーションがデータベースに適用されます。

vendor/bin/yii migrate/create --appconfig=config.php create_post_table --fields="title:string,body:text"
vendor/bin/yii migrate/up --appconfig=config.php

`models`ディレクトリと、そのディレクトリ内の`Post.php`ファイルを作成します。これがモデルのコードです。

<?php

namespace micro\models;

use yii\db\ActiveRecord;

class Post extends ActiveRecord
{ 
    public static function tableName()
    {
        return '{{post}}';
    }
}

情報: ここで作成されたモデルは、`post`テーブルのデータを表すActiveRecordクラスです。詳細については、アクティブレコードガイドを参照してください。

APIで投稿を提供するには、`controllers`に`PostController`を追加します。

<?php

namespace micro\controllers;

use yii\rest\ActiveController;

class PostController extends ActiveController
{
    public $modelClass = 'micro\models\Post';

    public function behaviors()
    {
        // remove rateLimiter which requires an authenticated user to work
        $behaviors = parent::behaviors();
        unset($behaviors['rateLimiter']);
        return $behaviors;
    }
}

この時点で、APIは次のURLを提供します。

  • /index.php?r=post - すべての投稿をリストする
  • /index.php?r=post/view&id=1 - IDが1の投稿を表示する
  • /index.php?r=post/create - 投稿を作成する
  • /index.php?r=post/update&id=1 - IDが1の投稿を更新する
  • /index.php?r=post/delete&id=1 - IDが1の投稿を削除する

ここから、アプリケーションをさらに開発するために、次のガイドを参照することをお勧めします。

  • 現在、APIは入力としてURLエンコードされたフォームデータのみを理解しています。真のJSON APIにするには、yii\web\JsonParser を設定する必要があります。
  • URLをよりフレンドリーにするには、ルーティングを設定する必要があります。これを行う方法については、RESTルーティングに関するガイドを参照してください。
  • さらに詳しい情報については、今後の展望セクションも参照してください。

タイプミスを見つけた場合、またはこのページの改善が必要と思われる場合は、
Githubで編集する !