2014-12-07 121 views
1

控制器方法有誰知道爲什麼不能在Laravel 5一個使用控制器的方法注射做出控制器方法中提供的$路由器單身,想在下面的代碼?進樣路由器到Laravel 5

use Illuminate\Routing\Router; 

class WelcomeController extends Controller { 
    // ... 
    public function test($name = 'default var value', Router $router) 
    { 
     // stuff like taking the {name} part of /say-hello-to/{name?} 
     // ...using $router->input('name') for example 
     // ...assuming a route like: Route::get('say-hello-to/{name?}', '[email protected]') 
    } 
} 

的另一種方式得到同樣的事情(慣用訪問控制器的方法內的URL部分)是有用的,但我已經想到了一個辦法做到這一點,我主要興趣爲什麼這不只是工作,因爲我想要得到的是的Laravel是如何工作有了更深的瞭解,什麼先進的模式可以一個emply它工作時。

回答

1

OK,我首先想到如何刪除這個後,我在〜5分鐘想通了自己的答案,但話又說回來,也許這是最好寫的其他人能夠給谷歌:

當結合可選的URL參數(如'test/{name?}')與控制器的方法注射,始終把用在方法聲明默認值的那些之前注入的參數,否則你最終會訪問該網址差異時不帶可選參數的一些非常令人困惑的錯誤盯着。

所以,在上面的例子中,它應該是:

public function test(Router $router, $name = 'default var value')

...而不是:

public function test($name = 'default var value', Router $router)

而且,順便說一句,如果更有經驗的人與Laravel比我遇到這種情況,請發表評論,如果你認爲這是一個Laravel 5的bug應該報告給開發商,或者如果你認爲這是對這種情況的預期行爲。

+0

你肯定嗎?這沒有意義。它應該像第一個形狀。 – Javid 2015-07-06 08:47:00

+0

這在預期的行爲。如果沒有在PARAMS特定的順序,這將是一個猜測是應該被注入,哪些僅僅是一個路線PARAM框架更難。實現這一點並非不可能,但似乎額外的邏輯並不值得。 **免責聲明**:我不是Laravel開發團隊的成員,所以這隻基於我的經驗。 – 2017-06-18 11:06:22