#Laravel捕捉路由參數
Laravel允許在controller方法中捕捉路由裡定義的參數,如下所示:
路由中定義參數:Route::get('post/{id}', 'PostController@content');
控制器方法裡捕捉路由參數:
class PostController extends Controller { public function content($id) { // } }
登入後複製
Laravel同時捕獲路由參數和查詢字串參數
那在控制器裡怎麼既能捕捉到路由裡定義的參數又能接收到url查詢字串裡的參數呢,例如請求連結是這樣的http://example.com.cn/post/1?from=index
#引用官網文件的解釋
Dependency Injection & Route ParametersIf your controller method is also expecting input from a route parameter you should list your route parameters after your other dependencies
##. #就是說如果想要在控制器方法注入依賴時仍然能使用路由裡的參數,你需要把路由裡的參數列舉在方法依賴的後面,例如:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PostController extends Controller { public function content(Request $request, $id) { $from = $request->get('from') } }
登入後複製
Laravel捕獲多個可選參數
此外laravel路由中我們也可以定義多個選用參數:
Route::get('/article/{id}/{source?}/{medium ?}/{campaign?}', 'ArticleController@detail')在控制器方法中可選參數需要定義成預設參數:
public function detail(Request $request, $id, $source = '', $mediun = '', $campaign = '') { // }
登入後複製
這樣定義完後路由裡URL裡可以傳遞0~3個可選參數,但是必須按照順序:即想傳第二個可選參數那麼第一個可選參數必須有。
URL範例:
http://example.com.cn/article/1/wx/h5?param1=val1¶m2=val2在這個範例中
"wx "
會傳遞給變數$source
, "h5"
會傳遞給變數$medium