Php Laravel:将var传递给控制器以动态地从存储中检索项

Php Laravel:将var传递给控制器以动态地从存储中检索项,php,laravel,laravel-5,Php,Laravel,Laravel 5,我的文件控制器中有以下功能,可从我的存储器(本地)检索视频: 在我的web.php中,我有以下route: Route::get('/get-video/', 'FileController@getVideo')->name('get-video'); 最后,在我的视图中,我有以下内容: <video controls> <source src="{{ route('get-video') }}" type="video/mp4"> Your b

我的
文件控制器中有以下功能,可从我的
存储器(本地)
检索视频:

在我的
web.php
中,我有以下
route

Route::get('/get-video/', 'FileController@getVideo')->name('get-video');
最后,在我的
视图中
,我有以下内容:

<video controls>

    <source src="{{ route('get-video') }}" type="video/mp4">
    Your browser does not support the video tag.

</video>
然后,我将
路线
更改为使用
var

Route::get('/get-video/{video_name}', 'FileController@getVideo')->name('get-video');
最后,在我的
视图中
,我将
var
传递给
路由

<video controls>

    <source src="{{ route('get-video', ['video_name' => '/map_name/name_of_video.mp4']) }}" type="video/mp4">
    Your browser does not support the video tag.

</video>

您的浏览器不支持视频标记。
但是,这会导致找不到404。我得到这条路线:
https://mysite.local/get-video/map_name/name_of_video.mp4

请注意,
/upload
部分不会被渲染。但是,如果我手动添加,路由也会失败

我已经做了php artisan存储:链接


旁注:mp4的
/map\u name/name\u是我可以从
数据库中检索到的每个视频的
/code>部分。

这与在路由参数中使用
/
字符有关,默认情况下,该字符不起作用,因为它是用于分隔路由参数的分隔符

您可以尝试按以下方式定义路线以克服此问题:

Route::get('/get-video/{video_name}', 'FileController@getVideo')->name('get-video')->where('video_name', '(.*)');
中,您可以定义一个与route参数匹配的正则表达式,在本例中,
*
匹配
/get video/
之后的所有内容

您可以像这样使用它:

{{ route('get-video', ['video_name' => 'map_name/name_of_video.mp4']) }}

不是我删除了路由示例中的前导
/
,以防止路径中出现重复的
/
字符。

有点离题,但我确实想留下几句话供将来研究/改进代码:-确保用户无法访问视频(或可能存储的其他文件)例如,他们不应该通过对照数据库中的记录来检查文件名。-研究如何将文件流式传输回用户,而不是使用
get
并将其转换为响应,因为这样会将整个文件加载到内存中,从而导致大文件出现问题。另请参见:我将对此进行调查!谢谢。
Route::get('/get-video/{video_name}', 'FileController@getVideo')->name('get-video')->where('video_name', '(.*)');
{{ route('get-video', ['video_name' => 'map_name/name_of_video.mp4']) }}