<?php
//Route Method有以下幾種
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Route::match($uri, $callback);
Route::any($uri, $callback);
//瀏覽器通過 http://127.0.0.1/hello 便會觸發以下
Route::get('hello', function(){
return 'welcome';
});
//如果需要同時響應多種Route Method 可透過match來實現 或用any響應所有route method
Route::match(['get','post'], 'foo', function(){
return 'This is a request from get or post';
});
Route::any('bar', function(){
return 'This is a request from any http verb';
});
//路由重定向 (Redirect)
Route::redirect('/here','/there');
//路由重定向到指定route
Route::get('/', function(){
return redirect()->route('route_name');
});
//帶參數重定向到指定route
Route::get('/{id}', function(){
return redirect()->route('profile', [$id]); //例子1
return redirect()->route('profile', ['id' => 1]); //例子2
});
//重定向到指定controller
Route::get('/', function(){
return redirect()->action('yourController@functionA');
});
//帶參數重定向到指定controller
Route::get('/{id}', function(){
return redirect()->action('yourController@functionA',['id' => 1]);
});
//定義route_name的例子
Route::get('/login', function(){
return view('login');
})->name('route_name');
//賦予值
//view('name') 即是開啟 resource/views/name.blade.php
Route::get('/', function(){
return view('welcome', ['website' => 'content_here']);
});
//resources/views/welcome.blade.php 內的 {{$website}} 便會變成 'content_here'
//帶參數
Route::get('user/{id}', function($id){
return 'User ' . $id;
});
//帶參數到controller
Route::get('user/{id}','UserController@update');
//對應的Controller
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function update(Request $request, $id){
//do something
}
}
//帶多個參數
Route::get('posts/{post}/comments/{comment}', function($postId, $commentId){
return $postId . '-' . $commentId;
});
//可選參數 (在參數名後加一個"?", 所以需要給予變量指定默認值)
Route::get('user/{name?}', function($name = null){
return $name;
});
//正規約束
Route::get('user/{name}', function($name){
//$name必須是字母且不能為空
})->where('name', '[A-Za-z]+');
Route::get('user/{id}', function($id){
//$id必須是數字
})->where('id', '[0-9+');
Route::get('user/{id}/{name}', function($id, $name){
//同時指定 id 和 name的格式
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
?>
//全域約束 (需要在RouteServiceProvider內的boot function定義)
//位置在 /app/Providers/RouteServiceProvider.php
//一旦定義後 所有id 需要是數字才會有效
public function boot()
{
Route::pattern('id', '[0-9]+'); //加上這一行
parent::boot();
}