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 Parameters
If your controller method is also expecting input from a route parameter you should list your route parameters after your other dependencies.
就是說如果想要在控制器方法注入依賴時仍然能使用路由裡的引數,你需要把路由裡的引數列舉在方法依賴的後面,比如:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
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