laravel - 下载页面的视图和控制器
问题描述
我需要创建一个下载页面。我有一个模型产品和一个模型文件。创建/存储和编辑/更新已经在工作。通过提交按钮,我将产品名称、描述等字段保存到产品表中。文件名、文件路径和产品 ID 等字段保存到文件表中。文件也上传到存储。模型 Product 与 File 有一个 hasMany-relation,模型 File 与 Product 有一个 BelongsTo-relation。在文件模型中,“product_id”与产品模型相关。
到目前为止,一切都很好。同样有效的是:FileController 的索引视图。我可以看到所有上传的文件,也可以下载它们。通过 product_id 我可以访问实际的产品展示方法。应该是这样的。在 index.blade.php 中是可能的:
@foreach ($files as $file)
<tr>
<th>{{ $file->filename }}</th>
<td><a href="{{ $file->filepath }}">download</a></td>
<td><a href="/products/{{ $file->product_id }}">{{ $file->product_id }}</a></td>
<td>{{ $file->id }}</td>
</tr>
@endforeach
在 show.blade.php 中,我已经可以看到 products 表中的所有数据。我有两个按钮用于下载更改日志(只是一个链接)和工作以及下载存储的文件(在文件表中。我无法让它为下载的存储文件工作。dd($files);
是 NULL。这是 ProductController 展示部分。我应用use App\File;
在控制器之上,因为我想赋予访问 File 模型的能力。
public function show(Product $product)
{
return view('products.show', compact('product','file'));
}
在 show.blade.php 我得到一个错误:compact(): Undefined variable: file
<div>
<button id="changelog" name="changelog" class="btn btn-lg btn-primary btn-block" type="submit" onclick="window.open('{{ $product->changelog }}')">Download Changelog</button>
<button id="filename" name="filename" class="btn btn-lg btn-success btn-block" type="submit" onclick="window.open('{{ $file->filename }}')">Download Installer</button>
</div>
如何访问其他模型或其他表的元素?我怎样才能扩展{{ $file->filename }}
或可能 {{ $product->$file->filename }}
让文件下载?
我几天以来一直在尝试,但找不到解决方案。
解决方案
谢谢,回复。我在构建 Eloquent 和 Query 时仍然遇到问题,但是使用 dd od var_dump 有很大帮助,并向我展示了我拥有有价值的数据。问题是定义查询。这是工作的东西:
产品型号:
public function file()
{
return $this->hasMany('App\File', 'product_id');
}
文件型号:
public function product()
{
return $this->hasOne('App\Product', 'id');
}
产品控制器:
public function show(Product $product)
{
$files = Product::with('file')->find($product->id)->file;
return view('products.show', compact('product', 'files'));
}
显示视图:
@foreach ($files as $file)
<button id="filepath" name="filepath" class="btn btn-lg btn-success btn-block" type="submit" onclick="window.open('{{ $file->filepath }}')">Download File: {{ $file->filename }}</button>
@endforeach
推荐阅读
- javascript - 函数的打字稿参数作为接口或类型
- r - 在R中:循环多个输入文件并根据每个输入文件的名称保存结果文件
- python-2.7 - 如何修复此错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 34: ordinal not in range(128)
- python - 如何使用similarity.jarowinkler检查pandas列中的术语相似度
- react-native - 如何在后台显示本地通知
- opengl - GLSL黑屏,着色器不做任何事情
- java - spring mvc herbinate 在与额外列的多对多关系中存在问题
- node.js - 为什么我的反应应用程序上的 nginx reverse_proxy 在搜索路径时返回 404?
- python-3.x - 如何理解PageRank计算的这种高效实现
- c++ - 计算 Reock 几何紧致度 C++