libro
www.tuyano.com
初心者のためのLaravel入門

ルーティングとコントローラー (5/5)

作成:2016-01-24 09:06
更新:2016-01-24 09:06

■コントローラーを作成する

これでテンプレートを利用して表示することはできるようになりました。が、アクセスに関する処理をすべてroutes.phpに記述するのは、ちょっと問題でしょう。ルーティングは、あくまでルート情報を管理するためのものです。画面に表示する詳細までまとめて記述したのでは、あまりに多くの事柄がつめ込まれてしまうことになり、コードもわかりにくくなります。

こうした場合、普通は「コントローラー」を用意し、この中でテンプレートの処理などを行うのが一般的です。

コントローラーは、「app」フォルダ内の「Http」内にある「Controllers」フォルダ内に用意します。では、このフォルダ内に「HeloController.php」という名前でファイルを作成しましょう。そして、下のリスト欄のようにコードを記述して下さい。これが、コントローラーのコードです。

コントローラーの説明をする前に、ルーティング情報を書き換えておきましょう。routes.phpを開き、先ほどのRoute::get('/helo',……);の処理をカットし、新たに以下の文を追記して下さい。
Route::controller('helo', 'HeloController');

これで、先程と同様、http://localhost:8000/helo にアクセスすると、helo.phpのテンプレートが読み込まれ表示されます。ちゃんと$messageにもテキストが表示されます。

■Route::controllerメソッドについて

今回は、Route::controllerメソッドというものを使っています。これは、一通りのHTTPメソッドへのアクセスをまとめてコントローラーに割り当てて処理するためのものです。これは、以下のように記述します。
Route::controller( アドレス , コントローラー名 );

これにより、指定されたアドレス下にアクセスされると、自動的にそのコントローラーに処理が渡されるようになります。

■コントローラーの仕組み

作成されるコントローラーは、App\Http\Controllers\Controllerというクラスを継承して作成します。このクラスには、アクセスされるアクションで呼び出されるメソッドが用意されます。今回のサンプルを見ると、
public function getIndex()

こんなメソッドが用意されていますね? この「getIndex」というメソッドは、GETアクセスで「index」というアドレスにアクセスした際に呼び出されるメソッドであることを示します。このHeloController自体が/heloに割り当てられていますから、/helo/indexにアクセスすると、getIndexが呼び出される、ということになります。

メソッド内で行っているのは、先ほどroutes.phpRoute::getで用意したのとまったく同じ処理です。viewreturnしているだけですね。

ここでの例のように、コントローラーに用意されるメソッドは、「HTTPメソッドの種類と、アクセスするアドレス」によって用意すべきメソッド名が自動的に決まります。この基本的な命名ルールをしっかりと覚えておきましょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class HeloController extends Controller
{
    public function getIndex()
    {
        return view('helo', ['message' => 'Hello!']);
    }
}
※関連コンテンツ

「初心者のためのLaravel入門」に戻る