只是想了解一些事情。一个项目可以有很多文档。在文档控制器中,我在create
函数中执行此操作:
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。
任何赞赏的信息。
由于
答案 0 :(得分:1)
它输出一个空文档。但是,如果我从函数参数中删除Document,它会输出我正在处理的文档的id。
为什么会出现这种情况?为什么传递Document输出一个空文档,但删除它只显示当前Document的id。
简单回答是reflection,而Laravels非常精彩Service Container。
通过类型提示Document $document
Laravel将从容器中为您构建一个新的Document实例。
如果没有类型提示,您的路线会定义如下内容:假设您将模型Document绑定到文档路径。
/document/update/{document}
此外,Laravel将始终作为第一个参数发送Request对象。