2016-01-08 3 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.

Любая информация оценили.

Благодаря

ответ

1

Он выводит пустой документ. Однако, если я удалю документ из параметров функций, он выводит идентификатор документа, над которым я работал.

Почему это так? Почему передача документа выводит пустой документ, но удаление этого только показывает идентификатор текущего документа.

Простой ответ reflection и Laravels замечательный Service Container.

По типу-намеку Document $document Laravel построит вам новый экземпляр документа из контейнера.

Без подсказки типа ваш маршрут определил бы что-то вроде следующего; Предполагается, что вы привязываете документ модели к вашим маршрутам документов.

/document/update/{document} 

Кроме того, Laravel будет всегда отправить в объекте запроса в качестве первого параметра.

Смежные вопросы