【问题标题】:How can I pass a variable from a controller to the routes file?如何将变量从控制器传递到路由文件?
【发布时间】:2019-12-09 06:39:09
【问题描述】:

我希望我的用户将文件上传到我的 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 下载链接,这样我的路由也可以有这个变量。

【问题讨论】:

    标签: php laravel laravel-blade


    【解决方案1】:

    您的操作方法如下:

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

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

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


    对于下载路径:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 2016-03-03
      • 2017-06-02
      • 2015-01-06
      相关资源
      最近更新 更多