2016-01-08 50 views
1

只是想了解一些東西。一個項目可以有很多文檔。在文檔控制器,我這樣做了create函數中:Laravel 5 - 奇怪的行爲我正在努力去理解

public function create(Project $project) 
{ 
    $documents = Document::all(); 
    $documentLink = $_GET['documentType']; 

    $document = Helper::findInCollection($documents, "name", $documentLink); 

    dd($document); 

    if ($document) { 
     return View::make($documentLink.'Doc.edit', compact('project', 'document')); 
    } 
} 

所以我基本上得到所有的文件。然後我得到我目前正在處理的文檔。然後我將它傳遞給該文檔的編輯視圖。 dd向我顯示正確的文檔,所以這很好。

在該文檔的編輯視圖,我也看到了正確的文件我想,如果我做

{{ $document }} 

所以我知道我有正確的Document。這個編輯頁面的表單模型

{!! Form::model($project->document, [ 
    'class'=>'form-horizontal', 
    'method' => 'PATCH', 
    'route' => ['projects.documents.update', $project, $document] 
]) !!} 

所以我傳遞的路線我Project型號和我的Document模型。現在我會假設$document將是我正在處理的文檔。

然而,在更新功能,如果我做

public function update(Project $project, Document $document) 
{ 
    dd($document); 

    return null; 
} 

它輸出空Document。但是,如果我從函數參數中刪除Document的類型提示,它將輸出我正在處理的文檔的id

爲什麼會這樣?爲什麼通過Document輸出一個空白文檔,但刪除它只顯示當前Document的id。

任何信息讚賞。

由於

回答

1

它輸出一個空文件。但是,如果我從函數參數中刪除Document,它會輸出我正在處理的文檔的ID。

爲什麼會這樣?爲什麼通過Document輸出一個空文檔,但刪除它只顯示當前Document的id。

簡單的答案是reflection和Laravels精彩​​。

By type-hinting Document $document Laravel將爲您創建一個來自容器的Document的新實例。

沒有類型提示你的路線會定義類似下面的內容;假定您將模型Document綁定到文檔路徑。

/document/update/{document} 

此外,Laravel將總是在Request對象作爲第一個參數發送。