路由負責管理網站所有的請求行為,根據訪問的網址以及請求動詞(GET.POST)來決定交由哪一個控制器的方法來處理
Laravel 5.3以前的版本
只有⼀個路由檔案,位於app/Http/routes.php
網⾴請求.API路由都寫在這裡
一般使用者透過瀏覽器所進行的請求都會交由routes/web.php來設定 而API相關的請求則是交由routes/api.php來設定
Route::get('路徑','App\Http\Controllers\HomeController@index');
get 請求動詞
路徑 網址路徑
控制器 負責處理此請求的控制器,8.x之後需要加上命名空間
方法 負責處理此請求的方法
規則判定由上至下逐一比對,只要符合路徑就傳遞給控制器
8.X之後支援的新寫法
use App\Http\Controllers\HomeController;
Route::get(‘路徑’,[HomeController::class,‘index’]);
設定此規則所⽀援的請求⽅式
重要 | 較不重要 |
---|---|
GET.POST | PUT.PATCH.DELETE.OPTIONS. ANY.MATCH |
PHP的匿名函式
//匿名函式可當成物件.指派給變數當成參數傳遞
Route::match(['get', 'post'], '/', function () {
return 'Hello World';
});
你可以不經由控制器裡的方法來處理請求,直接在路由檔內搞定,但不建議這樣做
//routes/web.php
Route::get('路徑',function(){
return 'Hello!';
});
位於app/Http/Controllers資料夾,可建立子資料夾
⽤於管理Model.View
建立檔案的指令
//app/Http/Controllers
php artisan make:controller HomeController
//建立⼀個不帶⽅法的Controller
php artisan make:controller Controller名稱
//建立⼀個帶CRUD⽅法的Controller
php artisan make:controller Controller名稱- -resource
你不應該回傳Echo
內容不會直接回傳給前端,還是會經過回應堆疊和中介層等等
//routes/web.php
Route::get('路徑/{id}',function($id){
return 'Hello ' . $id;
});
//routes/web.php
Route::get('路徑/{id}/{name}',function($id,$name){
return 'Hello ' . $id . ',Name is ' . $name;
});
Route::get('posts/{post}/comments/{comment}', function ($post,
$comment) {
//路徑分類⼀般都會有多個⽅法,都會加s,表⽰複數形
});
//routes/web.php
//=代表預設值
Route::get('路徑/{id?}',function($id = 1){
return 'Hello ' . $id;
});
設定路由群組
//prefix路徑前置詞,將所包含的路由規則路徑加⼊前置詞
Route::group(['prefix' => 'demo'],function(){
Route::get('hello', function () {
return 'Hello' ;
});
Route::get('world', function () {
return 'World';
});
});
//namespace命名空間,將所包含的路由規則控制器類別加⼊命名空間
Route::namespace(‘App\Http\Controllers\Admin’)->group(function () {
// 裡頭的控制器都包含在 以下命名空間”
App\Http\Controllers\Admin"
});
設定路由名稱
//routes/web.php
Route::get('demo/{id}','App\Http\Controllers\HomeController@index')->name('home.index');
//resources/views/show.blade.php
<a href="{{ route(‘home.index’, [‘id’=>1]) }}">總覽頁</a>
只要在參數前宣告模型類別,⾃動為你⽤id進資料庫查詢該表,直接提供model物件給你
Route::get('api/users/{user}', function (App\User $user) {
return $user->email;
});
//routes/web.php
Route::get(‘baha’,function(){
return redirect(‘[https://goblinlab.org](https://goblinlab.org/)’);
});
//routes/web.php
Route::get(‘redirect’,function(){
return redirect(url(‘hello’));
});
以後設定URL可以搭配route()直接使⽤Name
//routes/web.php
Route::get(‘users/{id}’,’App\Http\Controllers\UsersController@index')
->name(‘users.index’);
//resources/views/users.blade.php
<a href=“{{ route(‘users.index’, [‘id’=>1]) }} ”>
直接建⽴⽤以轉址的路由規則
//路徑 網址 狀態碼
Route::redirect(‘here’ , ’http://goblinlab.org’ , 301);
⽤於當⽤⼾輸⼊錯誤需要轉回表單⾴,並保存輸⼊內容
Route::post('form',function(){
return redirect('form')->withInput()
->with(['error' => true , 'message' => ‘Bad!’]);
});
⽤於轉回⾴⾯要取得保留的輸⼊內容
<input name=“username” value=“<?=
old('username','default value') ?>”>
將網頁做成類似一般App應用樣貌的一頁式操作
沒有名稱的匿名函式,一般用於封包程式碼且只用一次
Laravel所提供的工具類別,包含大量好用的類別函式
中介層,符合條件的請求在處理前會先執行的內容
我該先掌握哪些Route技巧? • 會撰寫基本路由語法 • ⾄少會GET.POST兩種動詞 • 會⽤路由傳遞參數 • 懂得怎麼轉址