Laravel4はどうなるの?

タグ: Laravel4  

(現在、バージョン4.0、正式版がリリースされています。Laravelの機能については、ドキュメントの翻訳、laravel4.kore1server.comをご覧ください。

まだアルファ版ですが、Laravel4でどこが変わるのか(変わる予定なのか)、簡単にまとめてみましょう。

参考:

Composerでパッケージ管理

Laravelのコアも、拡張機能も、Composer上で管理されるようになります。

関数名がキャメル記法に

PSR-1準拠のため、そうなります。

名前付きプレースホルダー

すでにFuelPHPなどでもおなじみな、名前付きプレースホルダーがルーティングに使用できます。

Route::get('users/{page}', function($page)
{
    // 実行内容
})  ->where('page', '\d+')
    ->defaults('page', 1)
    ->before('auth');

Laravel3の第2引数がLaravelにしては、記述が混みすぎるかなと思っていましたが、ルートの後ろにチェーンで指定できるようになるらしいです。上の例はたぶん、pageにあたる部分は数値(\d+)で、何も指定されない場合はデフォルトとして1が指定され、認証を通る必要があるルートになります。(なんと言ってもLaravelですから、読んだままですね。 :D )

Route::get('user/{action}', 'UserController@{action}');

説明は要らないと思いますが、action部分に指定した内容で、UserControllerクラスの該当するアクションを実行するルーティングです。いわゆるクラス/アクション/引数1/引数2をもっと柔軟に記述できるという事でしょう。

さらにコントローラークラスは名前空間を指定することもできます。SPR-0対応ですからね。

Route::get('post', 'Controllers\Post\DisplayController@displaySinglePost');

リソースフルなルートのサポート

Railsなどでお馴染みらしい、リソースフルなルートがサポートされます。これは、クラスを指定することで基本的なCRUDルートが自動的(固定的)に定義されることです。

Route::resource('post', 'postController');

しかも、Artisanのコマンド一発で、生成してくれるようになります。(そして、ますますRailsに似てきたと陰口が囁かれるようになります。:D )

HTMLとFormクラス

標準ではHTMLとFormクラスは無くなります。でも心配しないでください。拡張としてLaravel3と同じ機能のクラスが用意されます。標準ではなくなるという事です。これにより、他のテンプレートや拡張された新しいフォームクラスなどが使用できるようになります。利用者に合わせて使い分けができるという事ですね。

タスクは登録が必要

Laravel3では、ユーザーのタスクはapplication/tasks下に置くだけで使用できます。Laravel4になるとIocコンテナを使用して、登録が必要になります。どの様に使用するかですが、最新バージョンのLarave3のLaravel/cliをご覧になると、つかめると思います。すでにコアは、新しいやり方のコードに変更されています。

ヘルパーの多くが変更・廃止になる

e()も無くなります。まあ、htmlentities()のラッパーだから、自分で定義してもたいした手間でありませんね。多国化で使用する__()trans()に代わります。__()は確かに読めないのでLaravelらしくありませんが、多くのフレームワークで使用されている省略なので、残しても良いと思います。読めなくても、わかりやすいですからね。

ビュー周り

前にコードを見たときは、Blade以外のテンプレートエンジンを使えるようになっていました。現在もBladeを拡張したり、自分で変換スクリプトを書き、代わりに使用したりできやすくなります。全く別のテンプレートエンジンが使用できるかどうかは、きちんと見ていないのでわかりませんが、多分できるようになるでしょう。

クラスやIoC

Laravel3ではコントローラーには通常クラスを指定します。クラスの代わりにIoCに登録したコンテナ名も指定できました。これによりコントローラーのテストが行いやすくなっています。

Laravel4ではフィルターやビューコンポーサー、その他でも同様に、クラスやIoCへの登録名が使用できます。フィルターのクラスでしたら:

class GuestFilter {
    function filter() {
        if (!Auth::guest()) {
            return Redirect::back()
                ->with('message', 'ログイン中は使用できません。');
        }
    }
}

このように関数名filter()がフィルタリングに使用されます。ビューコンポーサーでしたら関数名は:

function compose() { }

となります。

ちなみに特定のコントローラーにだけ使用するフィルターでしたら、コンストラクタの中で無名関数を使用して定義することもできるようになります。

Artisanにヘルプ

本来、Laravel3に入っている予定だったはずのhelp機能がLaravel4で入ります。

まだまだ、あるのですが、今回はこのへんで。