Lravel5入門(その1)サンプルページを作ってみる

まずはサンプルページを作ってみるところからです。Laravel5はすべてルーティングとキャッシュでリクエストに応える形式なので実ページというか実ファイルはありません。なのでページの設定はやや抽象的な作業になります。大きくわけてルーティング・コントローラ・ビューの設定になります。ページの表示だけではDBの役割はあってもなくてもよいという感じになります。特に入門編ではまだまだ後々に理解してゆけばよいという感じでしょうか。

Welcomeページの構造をみてみる

さていわゆるインストール直後のWelcome画面がすでにルーティングで設定されています。Larabel5のインストールディレクトリがprojectの場合は、
project/app/Http/routes.php
にルーティングの設定がしてあります。
Route::get('/', function () {
return view('welcome');
});

さて、このwelcomeのviewはどこにあるのかというと、
project/resources/views/welcome.blade.php
にあります。
'/'でアクセスのあった場合にはwelcome.blade.phpを表示しなさいといったものになっております。

サンプルページを作成する

さてここで簡単なページを表示させてみます。先ほどのルーティングファイルに新しいパスを追加します。
# project/app/Http/routes.php
Route::get('/sample', function () {
return view('sample');
});

これでproject/resources/views/sample.blade.phpをビューとして呼び出すようになります。なので、このファイルを作ってあげます。
<!--# project/resources/views/sample.blade.php-->
Hello Laravel5

で、OKです。
これで/sampleにアクセスすると「Hello Laravel5」が表示されます。

ちょっと簡単に解説すると、ルーティングではRoute::getという風にgetメソッドでアクセスのあったときにどうするのかというのを設定できます。実際このルーティングではいろんなことができます。セキュリティー関連の制御、Ajax、上記の例のように無名関数でもって直接小さなコントローラのような挙動も制御できます。リクエストメソッドもここで制御します。
がここは入門コーナーなので、
Route::[REQUEST_METHOD]('[PATH]', '[CONTROLLER_NAME]@[CLASS_METHOD_NAME]');
とおぼえておけばよいかと思います。つまり上記無名関数はコントローラそのものを指していることになります。

コントローラを使ってみる

コントローラを使う前にコントローラの雛形を作成するコマンドを実行します。手動で作成することも可能ですが、面倒くさいです。面倒くさいのが好きな人は手で作ってみてください。
コントローラを作成するにはartisanコマンドを使います。
$ php artisan --list
でコマンド一覧が確認できます。その中にコントローラを作るmake:controllerも見つかります。
ここではSampleControllerを作成することにします。
$ php artisan make:controller SampleController
*実行に失敗しているとしたら、cd project/に移動していないのが原因かもしれないです。カレントにartisanファイルがないと実行できません。またもっと根本的な問題でphpのパスが通っていないとかcliが使えないとか。
この作成されたコントローラーは、
project/app/Http/Controllers/SampleController.php
に作成されています。
中身をざっと見てているとデフォルトのクラスがすでに書かれています。よく使うクラスです。また冒頭にはnamespaceが定義されています。これはコントローラーの場所(名前空間)がそのまま定義されています。useという項目も見かけるでしょう。これはPHP5.3以降で使われるようになりました。クラスをインポートするやり方です。
さて、クラスの中身をこんな風に編集します。
public function index()
{
return view('sample');
}

indexメソッドを使うとsampleというビューを表示しないさいという命令です。これでコントローラの作成は終わりです。
次にルーティングの設定を調整します。先ほどのSampleのルーティングを削除して、
Route::get('/sample', 'SampleController@index');
に書き換えてみてください。
// Route::get('/sample', function () {
// return view('sample');
// });
Route::get('/sample', 'SampleController@index');

これでSampleControllerのindexメソッドを読みに行きます。先ほどと同じように/sampleにアクセスしてみてください。同じように「Hello Laravel5」が表示されます。

コントローラをディレクトリ内に作成する

実際には、このコントローラもビューも各ディレクトリごとに格納し機能をわかりやすくするためにパスを指定して作成することが多いと思います。例えば、
project/app/Http/Controllers/Test/SampleController.php
にコントローラを作成したい場合は、
$ php artisan make:controller Test/SampleController
というふうにディレクトリをかまして作成します。まだディレクトリがない場合は自動的に新規作成してくれます。すでにある場合はその中に格納してくれます。
ルーティングではそのままパスを書けばいいわけですが、その際はどうしてだかバックスラッシュを使います。
Route::get('/sample', ' Test\SampleController@index');
コントローラはいくらでも入れ子にできます。コマンドで作成すると名前空間も自動的に割り振ってくれるのでとても便利。

Lravel5入門(その1)まとめ

MCVに慣れていないとわけのわからない部分が多いですが、慣れるといいものです。まずFrameworkの思想として「約束事」というものがあります。今回のこの流れはいわゆる約束事であって、こんなふうに書くことがみんなの約束になっているというだけです。その他の書き方は(規約にしたがっていないと)エラーになります。実際Symfony2はもっと厳しいです。
またビューのブレードというテンプレートエンジンもsample.blade.phpという書き方が約束になっています。その頭のsampleがビューの名前になっているわけです。この約束の元にreturn view('sample');という書き方ができます。

Bladeはもう有名なテンプレートエンジンです。Smartyとかと同じです。コントローラで書かれたロジックが返した値をそのままHTMLとして返します。なのでBladeの中ではHTMLタグと共に特殊な変数を使います。余談ですが、{{$sample}}こんな変数です。これらがきちんとエスケープされた形で使えるので安心です。