【Laravel】 Controller、View、ルーティングを一通り用意しよう
Laravelでページを表示するためには、まずはController、View、ルーティングを用意する必要があります。まずはこれらを一通り用意してみて、実際にページを追加してみます。
Viewの作成
まずはViewを作成しましょう。Controllerを先に作成しても問題ないですが、ControllerからViewを指定するため、先にViewがあるとわかりやすいかな、という程度です。
Viewは、resources/views
内に作成します。拡張子はPHPなのでPHPのコードが動くのですが、実際にPHPのコードを書くことは殆どありません。MVCにおいて、Viewは表示に徹し、ロジックを書くことは非推奨であるためです。Controllerから渡された値を表示する際には、テンプレートエンジンの構文を使うことがほとんどです。
本来は先にLayoutを用意すべきですが、とりあえず動くものを用意します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <p>hoge</p> </body> </html>
Controllerの作成
Controllerの作成では、普通にファイルを作成するのと、php artisan
を使う方法の2つあります。
ファイルはapp/Http/Controllers
内に作成されます。
artisan
は、Laravelに関するCLIのコマンドを使うためのものです。
artisanする
コントローラを作成するコマンドがあるので、それを使って作成します。コントローラ名は何でも良いですが、XXController
のような名前が良いです。
php artisan make:controller HelloController # 子孫ディレクトリに入れたい場合 php artisan make:controller Hoge\\HelloController
このコマンドはapp/Http/Controllers
にファイルを作成しているだけです。そのため、次のように手動で作成しても大きな問題はありません。
手動でファイルを作る
タイプミスやコピペ時の変更漏れなどを防ぐためにartisanの方を推奨しますが、手動で作成する場合はテンプレのコピペで作成で十分です。
<?php namespace App\Http\Controllers; // コントローラ名変え忘れ注意 class HelloController extends Controller { // ... }
ビューを取得するための実装をする
コントローラを作成したら、とりあえず簡単な実装をしましょう。ひとまずViewを呼び出すコードを入れます。
// ... class HelloController extends Controller { public function index () { return view('index'); } }
view関数は、引数に入れたviewをresources/views/
から探してくる関数です。
これで、resources/views/index.blade.php
を呼び出すことができます。
子孫ディレクトリを指定する場合は、view('hoge.fuga.index')
のようドット区切りで指定します。この場合、resources/views/hoge/fuga/index.blade.php
が対象になります。
ルーティングを作る
URLでアクセスしたときに、そのURLにControllerを対応させるようにルーティングを作る必要があります。
Route::HTTPメソッド('パス', [コントローラのクラス, メソッド名])
のようにします。コントローラのクラスは、完全修飾名 (namespaceを含めた名前) である必要があります。
ルーティングはroutes
フォルダ内にありますが、通常はweb.php
で良いです。
// ... // getメソッドで https://.../hello-world にアクセスすると、HelloControllerのindexメソッドを呼び出す Route::get('/hello-world', [App\Http\Controllers\HelloController::class, 'index']); // または Route::get('/hello-world', 'App\Http\Controllers\HelloController@index');
上の例のように設定方法は2つありますが、前者をおすすめします。前者の場合、クラス名でF12を押す(Go To Definition)と、パッとコントローラのコードに飛べるためです。
クラス名が長ったらしいので、ルートファイルの最初の方にuse App\Http\Controllers\SampleController;
のように、先にuse
しておくのもありです。
ルートを更新したときや、うまく反映されないと思ったら、php artisan optimize
すると改善する場合があります。
optimize
は各種キャッシュのクリアを行うものです。
これで準備が整いました。早速http://localhost/hello-world
にアクセスして表示されるか試してみましょう!
静的ページの場合
もしサーバ側の値を使わないような静的ページの場合、コントローラの実装を省略できます。
コントローラにreturn view(...);
と書いていたのを直接ルート側に書くだけです。
Route::get('/', function () { return view('index'); });
まとめ
ページを新規追加するには、ビューの作成、ルーティングの作成、コントローラのメソッド作成を行う必要があります。
とりあえずページを追加できたら、早速コントローラから値を渡してみましょう。
