Laravel 最速マスター
はじめに
このエントリはMojolicious最速マスター - Qiita [キータ]をぱk…インスパイアしたものです。
このエントリはLaravel Advent Calendar 2013の24日目の記事です。*1
PHP の Web Application Frameworkである Laravel でアプリをつくる場合に必要な基礎的な使用法を紹介します。
イントロ
インストール
composer を使用することによって依存関係を気にすることなくコマンド一発でインストールできます。
composer create-project laravel/laravel your-project-name --prefer-dist
起動
artisan コマンドを使用して起動させてみましょう。
php artisan serve
とすることで、 http://localhost:8000/
でアプリケーションが起動します。
ルーティング
GET/POSTのメソッドで振り分ける
app/routes.php
の中で Route::get と Route::post
を使いましょう。他にも Route::put
や Route::patch
, Route::delete
もサポートされているのですが、最初は get/post
で充分でしょう。
<?php Route::get('entry', function() { ...; }); Route::post('entry', function() { ...; });
URLの一部をキャプチャする - path の placeholder
/entry/1
とか /entry/2
とか /entry/3
とかURLの一部、この場合だと /entry/{数字の部分}
をキャプチャしてコントローラの中で使いたい時はこのようにします。
<?php Route::get('entry/{id}', function($id) { $entry = Entry::find($id); ...; })->where('id', '[0-9]+');
ルートパラメータはクロージャの引数に入るのでそのまま使えば OK です。
コントローラ
Laravel ではコントローラの処理を routes.php
に書く方法とクラスとして別ファイルに書く方法があります。1人で作業する場合やプロトタイプを作る場合は routes.php
に書くのはよい方法ですが、多人数での開発になるといささか不便です。その場合はクラスを作成するのがよいでしょう。ここでは説明を割愛します。わかりやすい ドキュメント がありますので、ぜひご覧になってください。
リクエストパラメータ値を取得する
Input::get
を使います。他にも取得方法があるので ドキュメント を参考にしてください。
<?php Route::post('entry', function() { $body = Input::get('body'); ...; });
デバッグ用のログを出力する
Laravel のログは app/storage/laravel.log
に保存されます。また、実行中にエラーが発生した場合はブラウザ上に詳細な例外画面が出力されます。*2また debug ログだけではなくエラーログなどログレベルを指定することが出来、他にも info/warning/error
等があります。
<?php Route::post('entry', function() { Log::debug('This is debug log!'); ...; });
テンプレート(ビュー)をレンダリングする
後ほど説明するテンプレート(ビュー)ファイルに値を渡しつつレンダリングする方法です。
<?php Route::get('/', function() { // app/views/index(.blade).php をレンダリングします return View::make('index'); });
View::make
の第1引数でテンプレート(ビュー)ファイルを指定します。またデータを入れる場合は、View::make
の第2引数に値をセットするか with
メソッドを使用します。
<?php Route::get('/', function() { return View::make('index', ['name' => 'localdisk']); // こう書いても結果は同じです return View::make('index')->with('name', 'localdisk'); });
JSONを出力する
View::make
のかわりに Response::json
を使用することで JSON を出力することができます。
<?php Route::get('json', function() { return Response::json(['status' => 'OK', 'message' => 'I am Fine!']); });
リダレイクトさせる
Redirect::to
を使用します。パスだけ書いて同じアプリケーション内へ、http://
からはじめてフルでURLを書くと外部サイトへ飛びます。
<?php Route::get('dummy', function() { return Redirect::to('/'); });
テンプレート(ビュー)
変数の展開
PHP の文法がそのまま使えます(当たり前)。その他に Laravel では Blade というテンプレートエンジンを持っています。ここでは両方の書き方を紹介していきます。
コントローラから渡ってきた変数の展開は基本このように書きます。
// php <p>Message: <?= e($message) ?></p> // Blade <p>Message: {{{ $message }}}</p>
PHP の場合は e()
関数を使用することでエスケープします。Blade の場合は {{{ $var }}}
という中括弧3つで自動エスケープします。
エスケープさせたくない場合は、PHP であれば e()
を使用しない、Blade の場合は中括弧2つで出力することによってエスケープ処理をオフにできます。
// エスケープしない例 // php <p>Message: <?= $message ?></p> // Blade <p>Message: {{ $message }}</p>
ループ
普通に foreach
でまわしましょう。entries
に Entry
クラスの配列が入ってるとして
<ul> <?php foreach($entries as $entry): ?> <li><?= e($entry->title) ?></li> <?php endforeach; ?> </ul> // Blade <ul> @foreach ($entries as $entry) <li><{{{ $entry->title }}}</li> @endforeach </ul>
で OK です。
レイアウトの適応
レイアウトの適応も Blade を使用すれば簡単に実現できます。PHP でやろうとするとちょっと大変なのでここは Blade を使用する例を紹介します。
# layouts/default.blade.php <html><body> <div id=“content”> @yield('content') </div> </body></html> # index.blade.php @extends('layouts.default') @section('content') <p>This is content section!</p> @stop
その他
セッションを使う
セッションは PHP のネイティブセッションの他に Memcached や Redis, データベースも最初からサポートしています。インターフェースは同じで設定ファイルを変更するだけで OK です。
<?php Route::get('/', function() { // 取得 $count = Session::get('count'); // 保存 Session::put('count', $count++); return View::make('index'); }); // View <p>Count: <?= e(Session::get('count')); ?>
ユーザーエージェント名を取得する
Request::server
で $_SERVER
の情報を取得できます。
<?php Route::get('ua', function() { $ua = Request::server('HTTP_USER_AGENT'); });
詳しい情報をドキュメントをどうぞ。日本語訳されているので安心ですよ。翻訳を行っている @HiroKws に感謝。
LeanPub にて Laravel 電子書籍が多数リリースされており @HiroKws が翻訳しています。私のおすすめをピックアップしておきます。Web にある情報で満足できなくなったら購入を検討してみるのもよいと思います。
- Laravel 4 ドキュメント+
- まずはこれ。5$ から帰るのでお得感あります。追補が本番。
- Laravel 4 Cookbook
- これを読めば Laravel でアプリケーションを作成するのに困ることはなくなるでしょう。500 ページのボリュームで $19.99 は実際破格だ。
- Laravel Testing Decoded
- アプリケーションを作るだけでは片手落ちだ。テストを書いてそのアプリケーションは初めて完成する。Laravel のテスト本。実のところ内容は Laravel にさほど依存していないので PHPer 全員におすすめしたい良本。
Laravel AdventCalendar 最終日
最後を締めてくれるのは @HiroKws さんです。よろしくお願いします!
最後に
僕も鍋食べたい。