はじめに
bladeタグに記載したformタグやaタグからcontrollerへのルーティングについて、なんとなく使ってしまっていたところがあったのでまとめておきます。
bladeからのルーティング
下記のようなbladeとルーティングを考えます。
hello.blade.php
<form method="POST" action="{{ action('GreetingController@hello') }}"></form>
<a href="{{ action('GreetingController@hello') }}"></a>
web.php
Route::post('/hello', 'GreetingController@hello')->name('greeting.hello');
この場合、formのサブミット(リンクのクリック)によって、GreetingControllerコントローラーのhelloメソッドが実行されます。流れとしては
- サブミットによって
action=""
やhref=""
に設定したURLへ遷移する。 - web.phpに記載したルーティングのうち、1で指定したURLに一致するルーティングのコントローラのメソッドが実行される。
という形です。
つまり、action=""
やhref=""
にはルーティング先に紐づくURLを指定すればよく、action(…)
の部分はこのURLを作成してくれています。
実際にaction(…)
で作成された値を確認してみるとhttp://localhost/hello
となっていて、下記のようにこのURLを直接action=""
やhref=""
に設定しても、同じようにルーティングされます。
hello.blade.php
<form method="POST" action="http://localhost/hello"></form>
<a href="http://localhost/hello"></a>
ただ、実際に開発する際にはURLを直接書くことはなく、冒頭に使用したaction()
などのURLを生成するメソッドを使用します。このURLを生成するメソッドには、action()
の他にもroute()
、url()
などいくつか種類があります。