Laravelのルーティングの概要を説明します。バージョン8.x以降はルーティングの記述の方法が若干変わりました(※に記載あり)。
プロジェクトを作成します。
1 |
$ composer create-project laravel/laravel sample-project --prefer-dist |
生成されたプロジェクトのディレクトリ内に移動します。
1 |
$ cd sample-project/ |
ディレクトリの確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ tree -L 1 . ├── app ├── artisan ├── bootstrap ├── composer.json ├── composer.lock ├── config ├── database ├── package.json ├── phpunit.xml ├── public ├── readme.md ├── resources ├── routes ├── server.php ├── storage ├── tests ├── vendor └── webpack.mix.js |
routesディレクトリ内には4つのファイルがありますが、Webページを表示しルーティングする場合はweb.phpを利用します。本記事ではこのweb.phpについて説明します。
1 2 3 4 5 |
├── routes │ ├── api.php │ ├── channels.php │ ├── console.php │ └── web.php |
まずプロジェクト作成後のデフォルトの状態を確認してみます。
routes/web.php
1 2 3 |
Route::get('/', function () { return view('welcome'); }); |
これはGETメソッドによって / にアクセスすると、resources/views内のBladeテンプレートであるwelcome.blade.phpが表示するように記述されています。view()の引数にはwelcome.blade.phpのwelcomeのみを記述します。GETメソッドの他にも、もちろんpost/put/delete等が利用できます。
仮にこのweb.phpに下記コードを追記し、更にresources/views内にabout.blade.phpを作成してみます。
routes/web.php
1 2 3 |
Route::get('/about', function () { return view('about'); }); |
resources/views/about.blade.php
1 |
<h1>aboutページ</h1> |
/about にアクセスすると、画面に「aboutページ」と表示されるのが確認できます。
コントローラによるルーティング
上記では任意のURLにアクセスした場合、view()によって直接ページを表示させました。次はコントローラを利用したルーティングについて説明します。バージョン8.x以降はルーティングの記述方法が若干変わりましたのでご注意下さい。
まずweb.phpに下記コードを追記します(バージョン8.x以前)。
routes/web.php
1 |
Route::get('/user', 'UserController@index'); |
/userにアクセスすると、UserControllerコントローラのindexアクションが実行されるように指定しています。
※Laravel バージョン8.x以降は、web.phpに下記コードを追記します。
routes/web.php
1 2 3 |
use App\Http\Controllers\UserController; Route::get('/user', [UserController::class, 'index']); |
次に下記コマンドでコントローラを作成します。app/Http/Controllers内に「UserController.php」ファイルが作成されるのが確認できます。
1 |
$ php artisan make:controller UserController |
app/Http/Controllers/UserController.php を確認し、下記の様にindexという名前のアクション(関数)を追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { public function index() { echo 'index'; } } |
/user にアクセスすると、画面に「index」と表示されるのが確認できます。
URLにパラメータを付与するパターンです。web.phpに下記コードを追記します。
routes/web.php
1 |
Route::get('/user/{id}', 'UserController@show')->where('id', '[0-9]+'); |
「->where(‘id’, ‘[0-9]+’)」は正規表現による制約を設定しています。
※Laravel バージョン8.x以降は、次のようになります。
routes/web.php
1 |
Route::get('/user/{id}', [UserController::class, 'show'])->where('id', '[0-9]+'); |
app/Http/Controllers/UserController.php にアクションを追記します。
1 2 3 4 |
public function show($id) { echo $id; } |
user/3 にアクセスすると、画面に「3」と表示されることが確認できます。数値以外を指定すると404エラーとなります。
リソースコントローラ
もし–resourceを付けてコントローラを作成した場合、RESTfulを想定したアクション(関数)が自動で用意されます。
1 |
$ php artisan make:controller SampleController --resource |
記載しませんが、生成されたSampleController.phpに、各アクションである index() / create() / store() / show() / edit() / update() / destroy() があらかじめ記述されているのが確認できます。
web.phpに下記コードを追記します。上述してきたようなgetではなくresourceと記述していることに注意して下さい。このように記述することによって上述したcreate()やstore()などの各アクションに対するgetやpostなどのメソッドに対応するルーティングがあらかじめまとめられています。
routes/web.php
1 |
Route::resource('/sample', 'SampleController'); |
※Laravel バージョン8.x以降は、下記コードを追記します。
routes/web.php
1 2 3 |
use App\Http\Controllers\SampleController; Route::resource('/sample', SampleController::class); |
これらの対応表は下記コマンドで確認できます。
1 |
$ php artisan route:list |
app/Http/Controllers/SampleController.php のshowアクションを下記のように編集します。
1 2 3 4 |
public function show($id) { echo $id; } |
以上で sample/3 にアクセスすると、画面に「3」と表示されることが確認できます。これは「/sample/○○」にアクセスすると、GETメソッドによってshowアクションが実行されるようになっているからです。つまりURIの形式によってあらかじめ実行されるアクションが決まっています。
仮に app/Http/Controllers/SampleController.php のcreateアクションを下記のように編集します。
1 2 3 4 |
public function create() { echo 'create'; } |
sample/create にアクセスすると、画面に「create」と表示されます。
URIとアクションと関係については、Laravel 5.8 コントローラ の「リソースコントローラ」の項目をご参照下さい。
関連ページ
参照ページ