Routing là gì?

  • Nôm na là Laravel không cho phép chạy file PHP bất kỳ nào một cách tùy tiện bằng việc gõ tên file lên thanh địa chỉ trình duyệt, mà tất cả phải được điều khiển thông qua Routing.
  • Routing được chứa trong thư mục /routes/

    • /routes/api.php: điều khiển các route của ứng dụng, như route của ứng dụng User (đăng ký, đăng nhập, ...).
    • /routes/web.php: điều khiển các route của view, như route của trang top, sản phẩm, ...
  • Trong phạm vi bài học này, không đi sâu vào tất cả nội dung của Routing nhe, chỉ cho các bạn biết Routing là gì, cách hoạt động của nó ra sao, làm sao sử dụng được Routing. Nội dung khác, nếu cần thì các bạn có thể tham khảo thêm tại trang chính của Laravel: Routing

Cấu trúc của một Routing

Route::METHOD('URL', ACTION);

Trong đó METHOD gồm:

Route::get($uri, $callback); // Nhận resquest với phương thức GET.
Route::post($uri, $callback); // Nhận resquest với phương thức POST.
Route::put($uri, $callback); // Nhận resquest với phương thức PUT.
Route::patch($uri, $callback); // Nhận resquest với phương thức PATCH.
Route::delete($uri, $callback); // Nhận resquest với phương thức DELETE.
Route::options($uri, $callback); // Nhận resquest với phương thức OPTIONS.
Route::match(['METHOD1', 'METHOD2',...], $uri, $callback); // Nhận resquest với các phương thức kết hợp.
Route::any($uri, $callback); // Nhận resquest với tất cả các phương thức.
Route::group('prefix'=>$uri, $callback); // Nhóm các route.

Viết một routing /routes/web.php đơn giản hiển thị dòng text "Hello World!"

Code viết

Route::get('/hello', function () {
    return 'Hello World';
});
  • /hello: là đường dẫn, tuy không có trang cụ thể, nhưng khi gõ trên trình duyệt thì trang hello sẽ được gọi.
  • Hello World: là dòng văn bản sẽ được hiển thị.

Hiển thị trình duyệt

Gõ lên trình duyệt đường dẫn http://localhost:82/hello

Hello World!

Mặc dù chúng ta chưa tạo file "hello", nhưng chỉ với việc khai báo routing, đã có thể hiển thị được nội dung cần thiết.

Routing với View

  • Đặt vấn đề: giả sử bạn đã tạo được một trang layout /resources/views/about.blade.php, vậy làm sao để bạn hiển thị được nội dung trang này trên trình duyệt?
  • Xem ví dụ sau để hiểu rõ cách gọi một Views như thế nào nhe:

Trước tiên bạn cần tạo một file about.blade.php bên trong thư mục /resources/views/ với nội dung đơn giản sau:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>About</title>
</head>
<body>
Đây là trang About
</body>
</html>

Viết một routing /routes/web.php hiển thị trang view /resources/views/about.blade.php

Code viết

Route::get('/about', function () {
    return view('about');
});
  • /about: đường dẫn gõ trên trình duyệt.
  • view('about'): trả về trang View about.blade.php vừa tạo bên trên.

Hiển thị trình duyệt

Gõ lên trình duyệt đường dẫn http://localhost:82/about

Đây là trang About
  • Chúng ta thấy nội dung trang about.blade.php đã được gọi.
  • Khi gõ lên thanh địa chỉ trình duyệt nội dung http://localhost:82/about, khi này Routing sẽ nhận yêu cầu xử lý và trả về View

Routing với Controller

  • Đặt vấn đề: chúng ta cần xử lý hàng loạt thao tác như: tính toán giá trị, xử lý lưu trữ dữ liệu, ... thì không thể nào chỉ làm bên trong ACTION của một Routing được, việc xử lý sẽ được thực hiện bên trong một Controller và trả kết quả về View để hiển thị ra trình duyệt.
  • Xem ví dụ sau để hiểu rõ cách hoạt động của một Controller như thế nào nhe:

Tạo một file Controller /app/Http/Controllers/NewsController.php (chú ý cách đặt tên viết hoa viết thường nhé ^^), nội dung:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class NewsController extends Controller
{
    public function index()
    {
        return view('news'); // trả về trang news.blade.php
    }
} // không phải thiếu thẻ đóng php đâu, cấu trúc nó vậy :"(

Tạo thêm một file View /resources/views/news.blade.php với nội dung:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>News</title>
</head>
<body>
Đây là trang News
</body>
</html>

Viết một routing /routes/web.php đơn giản hiển thị trang view /resources/views/news.blade.php thông qua một controller:

Route::get('/news', 'NewsController@index');

Phân tích chút xíu:

  • '/news': là đường dẫn trên trình duyệt.
  • '[email protected]'

    • NewsController: là tên Controller.
    • index: là tên function của Controller.

Hiển thị trình duyệt

Gõ lên trình duyệt đường dẫn http://localhost:82/news

Đây là trang News
  • Chúng ta thấy nội dung trang news.blade.php đã được gọi thông qua NewsController.php
  • Khi gõ lên thanh địa chỉ trình duyệt nội dung http://localhost:82/news, khi này Routing sẽ nhận yêu cầu xử lý, Routing chuyển nội dung xử lý sang Controller NewsController với function index, sau khi Controller xử lý xong sẽ trả kết quả về View