2014-07-10 137 views
0

我正在與Laravel進行一些路由。我需要將url部分作爲參數傳遞給控制器​​。通過使用Laravel將參數傳遞給控制器​​?

我知道這是可能的:Route::get('user/{name}', function($name){});但因爲我的所有代碼,直到如今以這種方式進行連接:Route::get('/{param}', array('uses' => '[email protected]')

我想是一致的,因此想知道是否有可能通過論證這樣的控制器?

回答

1

是的,這是可能的。簡單地聲明你這樣的CustomerController::index方法:

public function index($param) 
{ 
} 

參考:http://laravel.com/docs/controllers#basic-controllers

注意,默認值是必需的可選參數。例如,

// the route 
Route::get("/{param?}", array("uses"=>"[email protected]")); 

// in the controller 
public function index($param = null) 
{ 
} 

沒有默認值,當Laravel嘗試路由到不帶參數的方法時,您將收到「缺少參數」錯誤。

+0

so laravel是如此聰明,它指出功能需要參數,它傳遞給它?可能是反射能力? – gorgi93

+1

它讀取路由配置,該配置詳細說明了它需要從URL中提取的參數,然後通過[call_user_func_array](http://php.net/manual/en/function)將找到的任何值發送給方法.CALL-用戶FUNC-array.php)。 – Kryten

1

我看你只是接受了答案,但我會打提交的替代版本...

你可以注入定製服務,讓叫它UrlProvider,到控制器的構造函數。然後,只需訪問該服務即可獲取URL的相關部分。請原諒任何語法錯誤,它已經有幾年了,因爲我已經寫了任何PHP ...

public class MyController 
{ 

    private $urlP; 

    //dont forget to bind the UrlProvider in the IoC setup. 
    public __construct(UrlProvider provider) 
    { 
    $urlP = provider 
    } 

    public function Index() 
    { 
    urlP.GetUrl(); 
    } 

} 

public class UrlProvider() 
{ 

    function getUrl() 
    { 
    //you can parse out the relevant part of the URL here if you need. 
    return Request::path(); 
    } 

} 
+0

我不認爲使用$ _SERVER ['REQUEST_URI']是一個好主意,因爲Laravel通過Request對象來處理這個問題。 – gorgi93

+1

好點 - 我將它改爲使用Laravel的Request對象 – solidau

相關問題