※この記事は「2021年4月21日」に更新しました。
前回は、ルーティングについて学習しました。
今回は、コントローラについて。
コントローラとは
コントローラは、Laravel(ララベル)のような、MVCフレームワークにおいて、モデルとビューの橋渡しをするような存在です。
コントローラを説明する前に MVCフレームワークについて少し触れておきます。
MVC とは
MVC は、Model View Controller の略です。
これは、アプリケーションの処理をこれら3つの要素の組合せで構築していく考え方です。
- Model(モデル)
- データ処理全般を担当する部分。データベースアクセスに関する処理全般など
- View(ビュー)
- 画面表示を担当する部分。表示に使われるテンプレートなど
- Controller(コントローラ)
- 全体の制御を担当する部分。プログラムの基本的な処理
コントローラは、MVCフレームワークにおいて、基本となるものです。
これがないと、処理そのものが実行できないので、Laravel の開発では、まず、コントローラをつくるところから始まると理解してもらっても良いくらいです。
コントローラを作成する
コントローラは、artisan コマンドを使って作成することができます。
この artisan というのは、職人という意味です。
コマンドプロンプトを起動し、cdコマンドで laravelフォルダへ移動しましょう。
私と同様の設定で進めているのであれば、以下のコマンドを実行します。
cd C:\xampp\htdocs\laravel
そして、以下のコマンドを実行します。
php artisan make:controller TestController
TestController の部分がコントローラ名です。
コントローラ名は、〇〇Controller というように名前に Controller を付けたものが使われます。
これで、PHP のスクリプトファイルとしてコントローラが作成されます。
作成したコントローラの確認
作成したコントローラは、app\Http\Controllers にあります。
今回の場合は、TestController.php ファイルが作成されているはずです。
では、実際にテキストエディタで中身を見ていきます。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { // }
コントローラは、クラスとして作成されます。
extends というキーワードは、このブログで解説していなかったかもしれませんが、継承のことです。
つまり、Controllerクラスを継承して、TestControllerクラスが作成されているということです。
オブジェクト指向についての知識が不安な方は、下記記事をご参照ください。
namespace は、名前空間で、このクラスはここに配置されていますということ。
use は、Request というクラスをインポートしています。
作成したコントローラにアクションを追加する
現在、TestControllerクラスには、Controllerクラスを継承しただけで何も記述されていないので、アクションを追加します。
アクションは、メソッドとして追記していきます。
簡単なもので、適当に下記のようなメソッド(アクション)を追記します。
public function index(){ return 'TestController'; }
ルート情報の追加
ルーティングで紹介した、routesフォルダの Web.php に以下の内容を追加します。
Route::get('test', 'TestController@index');
前回、関数を指定した部分は今回、コントローラが指定されています。
コントローラ名@アクション名
このような書き方で第1引数で指定されたアドレスにアクセスすると、第2引数に指定されたコントローラのアクションが実行されるというわけです。
それでは、試しにブラウザで、下記アドレスへアクセスします(XAMPP で Apache を忘れずに起動させましょう)。
localhost/laravel/public/test
すると下記のように表示されるはずです。
最後に
いかがでしょうか。
PHP講座で、オブジェクト指向について、以前ざっくりと紹介したのですが、今回のような例がわかりやすかったかもしれません。
つまり、Controllerクラスの細かい内容がわからなくても、コントローラを作成することができるということです。
次回は、View(ビュー)について。
最初に紹介した Blade(ブレード)というテンプレートについてもふれていこうと思っています。