为了账号安全,请及时绑定邮箱和手机立即绑定

如何将变量从控制器传递到路由文件?

如何将变量从控制器传递到路由文件?

PHP
墨色风雨 2021-11-05 16:09:45
我希望我的用户将文件上传到我的 Laravel 站点,提交文件,然后能够通过单击另一个页面上的链接来下载相同的文件。除了将文件名指定给我的 html 下载链接上指定的路径之外,我知道如何执行所有操作。当用户上传文件时,他们的文件被 laravel 使用 storeAs() 命名为 file1.png。下一个上传的文件是file2.png,然后是file3.png,等等。用户按下提交来存储文件并被带到一个页面view.blade.php。在这个 view.blade.php 上,我希望有一个链接,他们可以点击并下载他们刚刚上传的文件。这是我的 view.blade.php 文件中的代码:<a href="/downloader">Download a file!</a><br>Pic name = <?= $fileName ?>这是我的“/downloader”路线:Route::get('/downloader', function() {    return response()->download('../storage/app/uploads/'.$fileName);});从那个 html 代码中, $fileName 正确打印了文件名,所以我知道 view.blade.php 有正确的变量。我知道问题是我的路由文件没有收到这个变量 $fileName,但我不知道如何将这个变量从这个 view.blade.php 传递到 html 下载链接,这样我的路由也可以有这个变量。
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

这是你如何做到的:


<a href="/downloader/{{ $filename }}"/>

但是为了能够使用上面的 $filename 变量,您必须通过 ViewData/ViewBag 传递有关它的信息。


您只需view()->with(["filename" => "thefile.png"]);在路由或控制器中执行此操作即可。


对于下载路线:


Route::get('/downloader/{filename}', function($filename) {

    return response()->download('../storage/app/uploads/'.$filename);

});

PS:这不是最安全的方法 - 强烈建议添加某种形式的验证,可能是文件名前的字母数字标记。


查看完整回答
反对 回复 2021-11-05
  • 1 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信