タイトルの通り、Laravelでコントローラとビューの部分を繋げて、http://localhost/testというページを作っていく。
大事そうな箇所だったので、フローを自分用のメモとして残しておくとにした。
DB接続は行わないので、MVCのモデル部分は触れずにいく。
Table of Contents
コントローラ「TestController.php」作成
まずはコマンドでコントローラファイルを作っていく。
ファイル名はお約束のアッパーキャメルケース(区切り大文字)で、下記ファイル追加コマンドをうつ。
sail artisan make:controller TestController
するとapp/Http/controllers/ディレクトリの中に「TestController.php」が作成される。
TestController.phpの中にメソッドを定義
上記により自動で作成されたファイルの中には、既にクラスが定義されているので、そこにメソッドを加えていく。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
//この部分を追加
public function test() {
return view('test');
}
}
testという名前のメソッドを定義し、さらに view(‘test’) の部分でどのファイルをビューとして表示するのかを指定している。
ここでのreturnは呼び出し元からの値を受け取っているわけではなく、下記のように解釈できる。
- ①コントローラーにて
return view('test');
と記述 - ②するとその
test.blade.php
ファイル(次に紹介)がPHPとして解釈・実行される - ③生成されるHTMLが「結果」としてクライアント(ブラウザ)に返却される
test.blade.phpを追加
実際に画面に表示するには、コントローラ→ビューにデータを繋ぐ必要がある。
resource/view/のディレクトリにtest.blade.phpを追加するが、中身はなんでもオッケーだ。
テストだよ
ルート設定
上記だけでは動かないので、最後にルート設定を行う。
これはユーザーからのリクエスト(今回はhttp://localhost/testの表示)に対して、どのコントローラのどのメソッドで処理を行うかを割り当てるために使う。
route/web.php の中に、先ほど作成したTestController.phpの内容を下記のように割り当てていく。
use App\Http\Controllers\TestController;
//~~~以下省略
use App\Http\Controllers\TestController;
Route::get('test', [TestController::class, 'test'])
->name('test');
これにより先ほどコントローラである TestController.php の中で書いた return view('test');
によって、test.blade.php
ファイルの中に書いた内容がHTMLとしてクライアントに返されるわけだ。
ちなみに、ルート設定は下記のように覚えておこう。
Route::HTTPメソッド('URL', [コントローラー::class,''メソッド])
->name('ルート名');
これに加えURLにパラメータを含みたい場合は、 Route::get(‘test/{paramname}’); とすればオッケーだ。
これで一通りの設定は終わったので「http://localhost/test」を叩けば、test.blade.phpで書いた「テストだよ」という文言が表示されるはずだ。
プロジェクト内のルートを一覧で表示
Laravelで作成したプロジェクト内にあるルートは、コマンド一つで可視化することができる。
sail artisan route:list
上記を打つと、「HTTPメソッド、ドメイン以下のURL、ルート名、コントローラー名、メソッド名」が書かれた一覧が表示される。
テンプレート内でリンク指定
Laravelのテンプレートエンジンである「Blade」を使っているので、Bladeテンプレート内のHTMLコードにPHPの変数や関数の結果を出力することが可能だ。
例えば、 ->name(‘ルート名’); で指定した名前はリンクとしてHTMLコードの中にも入れることができる。
<a href="{{ route('test') }}" class=~~~
//Laravelトップページの「welcome.blade.php」に記載
このほかにもディレクティブといって、 @if での条件分岐やログイン判定の @auth、@php でphpの構文をhtmlタグの中に挿入することもできる。
変数名を二重括弧で括ることで、従来のhtmlspecialchar()関数と同じくエスケープ処理が可能となっている。セキュリティの観点から、これはマストと覚えておく(クロスサイトスクリプティング攻撃のリスクを抑えるため)。
また、エスケープせずに変数を反映させるときは、下記を行う。
{!! $hemsu !!}
管理者や開発関係者だけが入力、表示する際に使用することができるが、使いどころは少なそうだ。