2017-08-08 81 views
2

所以,如果你因此,在這點上做類似laravel資源控制器/途徑和模式

$ artisan make:model TurboClown 
$ artisan make:controller TurboClownController -r --model=TurboClown 

有可能添加類似:

Route::resource('clowns','TurboClownController'); 

要將routes/web.php。現在我有clowns/{clown}這樣的路線,當我routes:list與工匠。

但是,我show功能是這樣的:

public function show(TurboClown $turboClown) 

,當你return $turboClown只會給[]作爲迴應,當你請求 「/小丑/ 3 /」 爲例。我花了一段時間才弄清楚,如果我將$turboClown參數更改爲$clown,我得到一個JSON TurboClown作爲響應。

所以從某種意義上說,我解決了我的問題。但我很好奇約上幾個點:

  1. 對我來說,https://laravel.com/docs/5.4/controllers#restful-naming-resource-route-parameters讀取彷彿我可以添加['parameters' => ['clown' => 'turboClown']然後show()將使用「turboClown」的工作,但事實並非如此。

  2. 根據https://laravel.com/docs/5.4/routing#route-parameters:「根據路由回調/控制器的順序將路由參數注入路由回調/控制器 - 回調/控制器參數的名稱無關緊要。」但在這種情況下,它看起來像參數的名稱很重要?

所以我正在尋找一些澄清這兩點,我錯過了什麼?

回答

2
  1. 你做錯了。該文件說:

參數數組應該是資源的名稱和參數名稱

所以你的情況的資源名稱是「小丑」的關聯數組(而不是「小丑」)並希望該資源名稱的參數是「turboClown:

Route::resource('clowns', 'TurboClownController', ['parameters' => [ 
    'clowns' => 'turboClown' 
]]); 
  • 我同意這一點,可以迷惑也許你已經知道,但你。在這裏做的事叫做implicit route model binding。而對於它是「隱」,有一個規則推翻你提到的:
  • Laravel自動解決了航線或控制器動作,它的類型,暗示變量名匹配的路由段名稱定義雄辯模型。

    此外,對於這個非常酷的工作,參數必須匹配相應模型的標識符(在您的案例TurboClown)。

    所以現在結合這兩點,你應該能夠做到這一點:

    在你的路由文件:

    Route::resource('clowns', 'TurboClownController', ['parameters' => [ 
        'clowns' => 'turboClown' 
    ]]); 
    

    TurboClownController

    public function show(TurboClown $turboClown) 
    { 
        return $turboClown; 
    } 
    

    現在讓我們假設你想檢索標識符爲5的渦輪小丑。您可以調整路線http://example.dev/clowns/5

    希望它有幫助。

    +0

    啊,謝謝Louis,那就是我一直在尋找的東西。我假設資源名稱是複數的「singularized」版本。 我在猜測「引擎蓋下」,那麼''clowns'=>'clown''正在發生。根據你的建議,'routes:list'正確顯示「clowns/{turboClown}」 –

    +0

    它實際上只是一個數組來明確告訴Laravel它應該使用哪個參數爲哪個資源:) – louisfischer