[Free] Laravel 11 cho nguời mới bắt đầu: Routing (Phần 2)

Trong phần này mình sẽ nói về phần Routing, mình thấy nó khá quan trọng của Laravel. Các bạn có thể tham khảo phần hướng dẫn từ Doc Laravel 11.

Tóm tắt một số phần chính trước nhé:

  1. Định tuyến cơ bản : Một số phương thức Router
  2. Các tham số cho router
  3. Đặt tên router
  4. Nhóm router
  5. Ràng buộc
  6. Và còn nhiều nữa mình sẽ nói ở phần khác

Ở phần 1 mình đã nói xong phần định tyến cơ bản một số phương thức, các tham số khi tuyền vào router. Phần này mình tiếp hết phần còn lại của Router nhé.

3. Đặt tên router

Các Router được đặt tên cho phép tạo URL hoặc chuyển hướng thuận tiện cho các tuyến cụ thể. Bạn có thể chỉ định tên cho một tuyến đường bằng cách xâu chuỗi name phương thức đó vào định nghĩa tuyến đường:

Route::get('/user/profile', function () {
    // ...
})->name('profile');

Note: tên router phải là duy nhất.

Để sử dụng các URL được đặt tên này bạn cần tạo một hàm ở Controler. và sử dụng một hàm trợ giúp đên router là : redirect

// Generating URLs...
$url = route('profile');
 
// Generating Redirects...
return redirect()->route('profile');
 
return to_route('profile');

4. Nhóm router

Để nhóm các Router bạn có thể sử dụng phương thức Middleware. Middleware được thực thi theo thứ tự chúng được liệt kê trong mảng:

Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        // Uses first & second middleware...
    });
 
    Route::get('/user/profile', function () {
        // Uses first & second middleware...
    });
});

Ngoài ra, bạn còn có thể sử dụng phương thức Controler. Nếu một nhóm các router sử dụng chung một Controler.

use App\Http\Controllers\OrderController;
 
Route::controller(OrderController::class)->group(function () {
    Route::get('/orders/{id}', 'show');
    Route::post('/orders', 'store');
});

Và còn một phương thức mình thấy khá nhiều người hay dùng là: Route::resource với phương thức này sẽ giúp file router của các bạn không trở nên dài dòng nữa

php artisan make:controller PhotoController --resource

Sau khi chạy lệnh trên, đây là file controller được sinh ra’

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PhotoController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

Tiếp theo bạn khai báo route cho controller

Route::resource('photos', 'PhotoController');

Các action được xử lý bởi resource controller:

Phương thứcURIHành độngTên route
GET/photosindexphotos.index
GET/photos/createcreatephotos.create
POST/photosstorephotos.store
GET/photos/{photo}showphotos.show
GET/photos/{photo}/editeditphotos.edit
PUT/PATCH/photos/{photo}updatephotos.update
DELETE/photos/{photo}destroyphotos.destroy