Laravelの制御部分、コントローラーの作成方法

 

LaravelのようなMVCと呼ばれるフレームワークでは、表示部分と処理部分を分けて書くように設計されており、その2つの仲介役的な役割をコントローラーが担います。

前回ルーティングのやり方について書きましたので、当記事ではコントローラーの作り方について書いていきたいと思います。

 

前回のルーティングについての記事は以下から参照できます。

関連記事

  Laravelでプログラムを書き進めていくにあたって必須になってくるのがルーティングという仕組みです。これを理解していないとウェブページに画面を出力することができません。 今回はそんな、Laravelを始めて最初に[…]

Laravelのルーティングについて

 

コントローラーの役割

 

いきなりコントローラーといってもなんだそれはという感じなので、MVCについて簡単にまとめました。

 

MVCフレームワークでは大きく3つの部品に分けることができます。

1つ目として、ビジネスロジックな処理を行っている部分をモデルと呼びます。MVCの「M」の部分にあたります。

2つ目として、画面表示を担当している部分をビューと呼びます。MVCの「V」の部分にあたります。

 

そして3つ目にあるのが、モデルとビューの橋渡し役としてのコントローラーと呼ばれる部分です。プログラム全体では制御を担当する部分になっていて、MVCの「C」の部分にあたります。

 

MVCについては以下のページが参考になりました。

https://qiita.com/gcyata/items/772b6989f4cdab0bd047

 

では具体的にコントローラーを作成する手順を見てみましょう。

 

コントローラーを作成してみる

 

Laravelにはコントローラーのフォーマットを簡単に作成できる機能が備わっています。

Windowsならコマンドプロンプトから、Mac,Linuxならターミナルからコマンドを打つだけで作成できてしまいます。

 

まず、コマンドプロンプトまたはターミナルでLaravelのファイルがインストールされているフォルダのトップに移動しましょう。

$ cd Laravelfiles

ここではLaravelfilesというフォルダがトップで、以下にLaravelのファイルたち(appとかbootstrapとか)があると想定します。

 

そこで以下コマンドを以下コマンドを打ち込んでみます。

$ php artisan make:controller SampleController
# php artisan make:controller コントローラーの名前

コントローラーの名前はわかりやすく大文字からはじめてOOControllerとなるようにするのが一般的だそうです。

 

このコマンドを実行したことにより、新たなファイルが作られます。場所はapp/Http/Controllersにあります。

見てみるとしっかりSampleController.phpというファイルが作られていると思います。

 

作られたSampleController.phpを開いてみると、SampleControllerクラスが作られていて中は何もない状態になっていると思います。

<?php
namespace App\Http\Controllers; 
//名前空間を定義、基本的にフォルダ構造と同じになるはず

use Illuminate\Http\Request; 
//リクエストに関する処理を使えるようにしてます

class SampleController extends Controller //クラスが作られていて中は何もない
{
  //
}

 

このフォーマットを利用して必要な処理をメソッドとして追加してしていく形になります。

 

ちなみにスペルミスなどで間違えてファイルを作ってしまった場合には作ったファイルを消してもう一回コマンドで作り直せば大丈夫です。

 

メソッドを追加してみる

 

では、試しにコントローラーにメソッドを追加してみたいと思います。indexというアクションを追加してみます。

class SampleController extends Controller
{
  public function index () {
    $html = '<html><body><h1>Hello World</h1></body></html>';
    return $html;
  });
}

今回は簡単にindexというメソッドにはHTMLを文字列として返す処理を書いてみました。

 

ルーティングからの呼び出し

 

では、どうやってルーティングからコントローラーを呼び出すのかということが気になります。

 

ブラウザからのURLとファイルの呼び出しはroutes/web.phpが行っていました。これにコントローラーを呼び出す処理を書いてみましょう。

Route::get('sample', 'SampleController@index');

コントローラーを呼び出すときの文法は第二引数に文字列で「コントローラー名@メソッド名」と指定してあげるだけです。

これで、「/sample」にアクセスすると、先ほど書いたSampleControllerクラスの中のindexメソッドの中の$htmlがHTMLとして読み込まれて表示されると思います。

 

また、以下のようにURL構成とコントローラーに統一した命名をするとよいみたいです。

  • URL: http://ドメイン名/コントローラー名/メソッド名

 

URLのパラメータも渡せる

 

URLに入力されているパラメーターもコントローラーに引き渡すことができます。つまり「/sample/OO」とアクセスしたときにOOが変数として扱えるということです。

 

まず、ルーティングの部分は以下のようになります。

Route::get('sample/{msg?}', 'SampleController@index');

これで第一引数にある{msg}の部分がパラメータとして扱われるようになります。また「?」を付けることによってパラメータが入力がなされなかったときにもエラーが出なくなります。

 

コントローラーの部分は以下の通りになります。

class SampleController extends Controller
{
  public function index ($msg = 'no msg') {
    $html = '<html><body><h1>'.$msg.'</h1></body></html>';
    return $html;
  });
}

indexには$msgという引数が与えられてます。これは、先ほど指定したパラメータをindexの中で使えるようにするために書いています。

試しに「/sample/hello」でアクセスするとhelloが表示されるかと思います。

 

まとめ

 

Laravelでコントローラーの作り方とルーティングからの呼び出し方についてわかりました。今回の流れをまとめると以下の感じになります。

・コントローラーはコマンドプロンプトまたはターミナルからフォーマットが作成可能

・できたフォーマットにメソッドを追加する

・ルーティングから呼び出す

 

最後に…   Laravelを勉強し始めでもっと勉強したいなら以下の本がおすすめです。