2
0

More than 3 years have passed since last update.

Laravelルーティング

Last updated at Posted at 2020-09-29

Laravelにおけるルーティングを説明していきます。

ルーティングとは

ブラウザから任意のURLアクセスがあった場合、どのController処理を動かすのかを定義するところになります。記述する場所はroutes/web.phpになります。またHTTPメソッド(GET,POST,PUT等)も定義できます。下記のイラストの①の部分にあたります。
imager.png

ルーティングの書き方

記載する場所はroutes/web.phpになります。
例) ブログ一覧を表示したい

routes/web.php
Route::get('blogs','BlogContoller@showlist');

左から順に説明します。
1. Laravel既存機能のRouteファサードを使う(Route)
2. HTTPメソッドの指定(get)
3. 任意のURLを指定(blogs)
4. 作ったControllerを指定(BlogContoller)
5. Controllerのメソッドを指定(showlist)

名前付きルート

作成したRouteに名前をつける事ができます。これにより特定のルートへのURLを生成したり、リダイレクトしたりする場合に便利です。ルート定義にnameメソッドをチェーンする事で名前がつけられます。

routes/web.php
Route::get('/','BlogContoller@showlist')->name('blogs');

生成+リダイレクト

ルートに一度名前を付ければ、その名前をグローバルなroute関数で使用すればURLを生成したり、リダイレクトしたりできます。

//URLの生成
$url = route('blogs');
//リダイレクトの生成
return redirect()->route('profile');

URLを一括で変更できる

viewで

{{ url('/users/1/profile')}}

上記のように書いてしまうと、URLを変更する際にviewの中から同じ箇所を探さないといけなくなってしまいますが、

{{ route('user.profile',['id' => 1])}}

としていれば、routes/web.phpのみを変更すればよくなります。

resource

resourceはリソースコントローラーと呼ばれ、一般的なCRUD(投稿、一覧、更新、削除、詳細)操作を予めLaravel側で用意してくれるものです。web.phpでHTTP動詞をRoute::resourceとする事で以下のメソッドを定義した扱いとなります。また、name()も勝手に付与してくれます。
1. index(一覧)
2. show(詳細)
3. create(作成画面)
4. store(作成処理)
5. edit(編集画面)
6. update(編集処理)
7. destroy(削除処理)

これにより、かなりのコード短縮化が図れます。
一つずつ

web.php
Route::get('admin/post', 'Admin/PostController@index')->name('admin.post.index');
    Route::get('admin/post/show/{id}', 'Admin/PostController@show')->name('admin.post.show');
    Route::get('admin/post/create', 'Admin/PostController@create')->name('admin.post.create');
    Route::post('admin/post/store', 'Admin/PostController@store')->name('admin.post.store');
    Route::get('admin/post/edit/{id}', 'Admin/PostController@edit')->name('admin.post.edit');
    Route::post('admin/post/update/{id}', 'Admin/PostController@update')->name('admin.post.update');
    Route::post('admin/post/destroy/{id}', 'Admin/PostController@destroy')->name('admin.post.destroy');

resource版

Route::resourcre('post','PostController');

また、以下のartisanコマンドで対応するコントローラとメソッドを自動生成してくれます。

$ php artisan make:controller PhotoController --resource
PhotoController
//コマンド入力で自動的に作成される
namespace App\Http\Controllers;
class PhotoController extends Controller
{
    public function index()
    {
        //
    }

    public function create()
    {
        //
    }

    public function store(Request $request)
    {
        //
    }

    public function show($id)
    {
        //
    }

    public function edit($id)
    {
        //
    }

    public function update(Request $request, $id)
    {
        //
    }

    public function destroy($id)
    {
        //
    }
}

onlyオプション/exeptオプション

これにより、resource使った時のルーティングを制限する事ができるので、余計なルーティングを生成しないで済みます。

routes/web.php
//edit,updateのルーティングを削除

//only
Route::resource('hoge', 'HogeController', ['only' => ['index','create','show','store','destroy']]);
//except
Route::resource('hoge', 'HogeController',[except => ['edit','update']]);

resource懸念点

実務でresourceを使ってしまうと、使わないルートまで定義されてしまうので、「個別で書いた方がいい」、「only,exceptオプションを使う」という意見があるらしいです。使う用途によって使い分けた方が良さそうです。

終わりに

参考サイト
https://qiita.com/sympe/items/9297f41d5f7a9d91aa11
https://qiita.com/namizatork/items/78487c2504b7ad4faf27

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0