ルーティングの記述でよく使いそうな機能をいくつか試してみます。
Route::get() / Route::post()
route.phpで行っているルーティングは、Routeクラスを使って行います。
getメソッドはGETアクセスされた場合、postメソッドはPOSTアクセスされた場合になります。
PHP
Route::get(URL, 処理); Route::post(URL, 処理);
例えば、/sample/のURLにフォームを設置して、POSTした内容を同じページに表示するようにしてみます。
routes.php
/sample/にアクセスしたときに、SampleControllerの処理を行うようにします。
Route::get('/sample', 'SampleController@sampleGet'); Route::post('/sample', 'SampleController@samplePost');
SampleController.php
ページアクセス時(GET)は「名無し」を、POSTした後は送信されたnameをviewに渡します。
<?php namespace App\Http\Controllers; use Request; class SampleController extends Controller { public function sampleGet() { $name = '名無し'; return view('sample.index', compact('name')); } public function samplePost() { $name = Request::input('name'); return view('sample.index', compact('name')); } }
sample\index.blade.php
フォームではnameを送信するようにして、コントローラーから受け取った値(name)が$nameに表示されます。
<p>{{$name}}さん こんにちは</p> <form method="POST" action="./"> <input type="text" name="name"> <input type="submit" value="送信"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> </form>
ページアクセス時
フォーム送信後
Route::controller()
controllerメソッドはgetやpostなどをroute.phpで指定するのではなく、まとめてコントローラー内で割り当てることができます。
例えば、GETアクセスでindexにアクセスがあった場合、getIndex()というメソッドが呼び出されます。
PHP
Route::controller(URL, コントローラー名);
先ほどの例をcontrollerメソッドに変更してみます。
routes.php
Route::controller('/sample', 'SampleController');
SampleController.php
sampleGetとsamplePostをそれぞれgetIndexとpostIndexに変更しました。
<?php namespace App\Http\Controllers; use Request; class SampleController extends Controller { public function getIndex() { $name = '名無し'; return view('sample.index', compact('name')); } public function postIndex() { $name = Request::input('name'); return view('sample.index', compact('name')); } }
ルートパラメータ
URLから何らかの情報を取得したい場合、ルートパラメータを使用します。
例えば、URL内に含まれる商品IDを取り出して使いたい場合などは以下のようにします。
routes.php
Route::get('item/{id}', function ($id) { return '商品ID: ' . $id; });
ルートパラメータが必須でない場合、後ろに?をつけます。
routes.php
Route::get('item/{id?}', function ($id = null) { return '商品ID: ' . $id; });
【参考サイト】
コメントが承認されるまで時間がかかります。