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

时间:2019-07-31 17:09:46

标签: php laravel laravel-blade

我希望我的用户将文件上传到我的laravel网站,提交文件,然后能够通过单击另一页上的链接来下载同一文件。除了将文件名赋予我的html下载链接上指定的路由外,我知道该怎么做。

当用户上传文件时,laravel使用storeAs()将他们的文件命名为file1.png。下一个上传的文件是file2.png,然后是file3.png,依此类推。用户按下Submit来存储该文件,然后转到页面view.blade.php。在此view.blade.php上,我希望有一个链接,他们可以单击并下载他们刚刚上传的文件。

这是我的view.blade.php文件中的代码:

<a href="/downloader">Download a file!</a>
<br>
Pic name = <?= $fileName ?>

这是我的“ /下载程序”路线:

Route::get('/downloader', function() {
    return response()->download('../storage/app/uploads/'.$fileName);
});

从该html代码中,$ fileName可以正确打印文件名,因此我知道view.blade.php具有正确的变量。我知道问题是我的路线文件没有收到此变量$ fileName,但我不知道如何将其从此view.blade.php传递到html下载链接中,以便我的路线也可以具有该变量。

1 个答案:

答案 0 :(得分:0)

这是您的操作方式:

<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:这不是最安全的方法-强烈建议在文件名之前添加某种形式的验证,也许是字母数字标记。