[ Laravel ] 初心者之路#05 – Laravel Routing 路由控制

標籤: , , , , ,

前言

在還沒有接觸Laravel或其他框架之前,你寫出來的php網站,網址是不是像這樣:
https://mywebsite/index.php

https://mywebsite/login.php

對吧? 然後你的網站資料夾可能會像這樣:

php_directory

(還是其實只有我的資料夾這麼凌亂XD)

然而,這樣的方式會帶來維護上的困難以及安全上的問題,所以此時就需要一個「管理員」的幫助啦!

 

Laravel Routing簡介

如果有接觸過網路相關的人應該對於Route這個詞不陌生沒聽過的人也別擔心!它的中文是「路由」,概念很簡單: 有一個中間人,它會將接收到的訊息,轉發到該去的地方

聽起來好像某種單位的運作方式,沒錯!就像你我熟知的郵局,某人寄出一封信,而郵局就根據地址,寄到目的地沒有這個地址或人會發生什麼事情?郵局就會告訴你,這個地址或人不存在,對吧?

而Laravel Routing就像這個樣子!讓我們看看它的運作流程:

laravel_routing

整個網站的入口就是位於 /public/index.php ,由它去叫laravel開始動作,然後根據Client端要求的網址,Route會去轉給對應的Controller,經過處理後回傳View給Client

 

Route File內容長什麼樣子? 在哪裡呢?

之前介紹專案結構的時候有帶大家看過Route的樣子,不曉得各位還記不記得呢?沒關西,記得我也沒有獎品給你XD

大家可以打開 /routes/web.php 來看看

laravel_route_content

想起來了嗎?我們還找到了welcome這個view去小小更改了內容來進行實驗

 

Route該怎麼寫?

從 web.php 的內容可以看到

Route::get('/', function (){
    return view('welcome');
});

這一串的意思就是,當從client端得到get要求/(網站根目錄),route會呼叫一個function,內容是回傳welcome這個view

 

Route方法的結構是:

Route::{HTTP verb}($url, $callback);

Laravel Routing支援的HTTP verb包含了6種:

  • GET – 取得資源
  • POST – 新增一筆資源
  • PUT – 更新一筆資源
  • Patch – 更新一筆資源的部分內容
  • Delete – 刪除一筆資源
  • Options – 取得Server支援的Request Types有哪些
Route::get($url, $callback);
Route::post($url, $callback);
Route::put($url, $callback);
Route::patch($url, $callback);
Route::delete($url, $callback);
Route::options($url, $callback);

 

$url代表接收到的網址,像根目錄就是/,而登入可能是/login

$callback代表處理這個要求的方法

 

如果是單純回傳view,可以像web.php的寫法一樣

Route::get('/', function ()
{
    return view('welcome');
});

也可以寫成

Route::view('/', 'welcome');

如果要進行比較複雜的處理,我們通常會轉給Controller進行處理

Route::get('user/profile', 'UserController@showProfile');

這一串表示當接到 user/profile 這個網址要求, route 會去呼叫 UserController 裡面的 showProfile 這個function,簡單易懂對吧?

Controller的教學之後會再教各位,現在就先將它擺在一旁吧XD

 

Route Parameters 傳遞參數!

今天Client端可能要看某篇文章,此時就需要透過參數傳遞來達成

Route該如何加入參數呢,讓我們看看:

Route::get('post/{id}', 'PostController@show');

如此一來從Client傳來的{id}就會傳給PostController的Show()來中進行處理,最後回傳資源給Client

 

還有另外一種參數傳遞長成這樣

Route::get('users/{name?}', function ($name = 'Chase')
{
    return 'Hello, I am ' .$name;
});

{name?} 代表的就是可選擇的參數,相較於前一個參數傳遞,差別在 {id} 一定要有參數傳入,而 {name?}不用,可以自己設定沒有傳入參數時的預設值

所以第一種為必需參數(Required Parameters),第二種為可選參數(Optional Parameters)

 

 

Named Route幫你的Route命名!

假設你今天有這樣的Route

Route::get('post', 'PostController@index);
Route::post('post', 'PostController @create);

你可能會使用 url('/login') 來取得網址,但一個是get,一個是post有時可能會搞混。

此時如果我們幫Route命名一下~

Route::get('post', 'PostController@index')->name('post.index');
Route::post('post', 'PostController@login')->name('post.login');

如此一來,只需要使用 route('post.index') / route('post.login) 就可以取得它們的網址了,很方便吧!

 

Route Group – Prefixes前綴群組

Prefixes最主要就是去群組同樣路徑下的網址,讓你少敲一點鍵盤XD

讓我們看例子:

Route::prefix('admin')->group(function ()
{
    Route::get('users', function ()
    {
        //所以網址要是/admin/users才會進來這裡
    });
});

 

Route Group – Middleware

Middleware的概念是把一群Route群組起來,經過驗證才可以進入存取

看例子吧:

Route::middleware(['member'])->group(function () {
    Route::get('member_center', function () {
        // 經過member middleware驗證後才能進入
    });
});

Middleware是一個過濾機制,讓Client在存取某些資源時必須先經過驗證,否則會被導向其他地方。

有興趣可以參考https://laravel.com/docs/5.5/middleware

 

總結

好的,今天Laravel的Routing教學就介紹到這裡

我們今天講了

  • Laravel Routing的運作流程
  • Route File在哪裡?該怎麼寫?
  • Route傳遞參數
  • Route的命名
  • Route的群組

希望各位都有學到一些東西!

想要了解更多的同學可以到官方文件https://laravel.com/docs/5.5/routing去研究一下唷~

 



相關文章

初心者之路#07 – Blade 實作 前言 在上一次我們介紹完Larave 的 Views, Blade Templates後,今天要來帶各位實作看看Blade Teamplates,讓大家可以對於這部分更加熟悉! 準備 h...
初心者之路#10 – Migrations 和 Schema 前言 在前一篇 初心者之路#09 – Database in Laravel我們了解到如何透過Laravel提供的SQL方法以及Model來對資料庫進行存取 現在,我們要來看看該如何建立一個資...
初心者之路#04 – 工具準備 (VS Code, Git) 所謂工欲善其事,必先利其器,初心者要練等打怪,也要先有武器裝備。今天要跟各位介紹的,是我們在開發專案時會使用到的工具,包含了文字編輯器- Visual Studio Code,以及版本控制系統- Gi...
初心者之路#01 – Laravel介紹 Laravel是什麼? 可以吃嗎(X 不能吃唷! 根據官方的說法,Laravel是一個PHP框架(Framework),專門為了熱愛簡潔、漂亮、優雅程式碼的你所打造的。 &nbs...