
PHP Laravel 開發入門(四) – 路由(Routes)
任何一個網站框架最基本的功能就是透過http(s)取得客戶端的需求後並且回覆相關資訊,這意味著在學習框架中首要的是定義路由,如果沒有路由也就無法完成與客戶端互動。 在Laravel的框架中,你可以透過 routes/web.php 定義 web相關的 routes,並透過 routes/api.php 定義 api相關的 routes。也就是說你可以將api與web做區隔建立對應的route。(如果是 5.3之前的版本,routes則存在 app/Http/routes.php中。)在這邊我們主要討論的是 web.php為主。 基本路由在web.php中有一個為根目錄(‘/’)且附帶閉包函數的預設路由。這個路由預設是使用者造訪根目錄時,就會回傳 welcome.blade.php 的內容。 Route::get('/', function () { return view('welcome'); }); 除此之外,我們也可以不透過echo或print回傳字串。例如: Route::get('/', function () { return 'Hello World!'; }); 假設我們要設定一個回傳about的路由,可以透過 Route::get('about', function () { return 'this is about!'; }); 或顯示 resource/views/about.blade.php Route::get('about', function () { return view('about'); }); 路由動詞在HTTP通訊協定中制定了幾種動詞(Verbs)與伺服器溝通,在上一節中我們使用GET用來讀取資料。那其他PUT、POST、DELETE該如何定義? Route::post('/', function () {}); Route::put('/', function () {}); Route::delete('/', function () {}); 如果要符合所有通詞,則使用any Route::any('/', function () {}); 另外,要符合部分動詞,則使用match Route::match(['get', 'post'], '/', function () {}); 如果要路由至特定的控制器(Controller),下面的例子會對應到 app/Http/Controllers/WelcomeController.php的index函數 Route::get('/', 'WelcomeController@index'); 路由參數如果你的路由需要傳遞參數的話,,該如何傳遞呢? Route::get('users/{id}', function ($id) { // }); 如果傳遞的參數要有預設值的話, Route::get('users/{id}', function ($id='123') { // }); 另外,參數也可以透過正規式讓裡頭的函數只能接收相 對應的值。 // id只能輸入 0-9 Route::get('users/{id}', function ($id) { // })->where('id', '[0-9]+'); // username只能輸入大小寫的英文字母 Route::get('users/{username}', function ($username) { // })->where('username', '[A-Za-z]+'); // id只能輸入數字;slug只能輸入英文字母 Route::get('posts/{id}/{slug}', function ($id, $slug) { Route Definitions | 27 // })->where(['id' => '[0-9]+', 'slug' => '[A-Za-z]+']); 路由命名在url Helper可以透過 url()去轉向,而在laravel框架中更允許你對每個路由做命名。 例如我們要顯示某一位會員的資料,可以先將會員資料做處理, // 定義members/ID為members.show Route::get('members/{id}', 'MembersController@show')->name('members.show'); // 在View <a href="<?php echo route('members.show', ['id' => 14]); ?>"> 路由群組在Laravel裡有一個好用的路由群組,舉例來說,我有一個api相關的群組,一開始的定義可能如下: Route::get('/api', function () { }); Route::get('/api/users', function () { }); 我們透過路由群組可以簡化成 Route::group(['prefix' => 'api'], function () { Route::get('/', function () { }); Route::get('users', function () { }); }); 子網域路由在網址裡,可能會有不同的子網域,我們也可以透過子網域的路由來完成 Route::group(['domain' => 'admin.codedata.com.tw'], function () { Route::get('/', function () { // }); }); 同樣的,也可以透過參數帶入不同的子網域 Route::group(['domain' => '{account}.codedata.com.tw'], function () { Route::get('/', function ($account) { // }); Route::get('article/{id}', function ($account, $id) { // }); 這樣大家對路由有沒有基本的瞭解了呢?下一次我們來解說Controller(控制器)。 |
Robin Zhang
01/30
雖然後續沒有更新 但是這四篇Laravel 的教學真的非常棒 感謝你
如果有新的篇章 我會很開心的~感謝