我在刀片中有以下图片标记。
{!! Form::image('/MySplash/1/file.png', $alt="Photo", null) !!}
以下是我在路线档案中的代码..
Route::get('MySplash/{IconID}/{UniqueFileName}', function ($IconID, $filename)
{
$path = storage_path() . '/SplashScreenIcons/' . $IconID . '/' . $filename;
if(!File::exists($path)) {
abort(404);
}
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;;
});
最后我得到了如下图片网址。
http://localhost/SportsApp/public/MySplash/1/file.png
问题是什么
- 它没有进入路线。
- 网址正在公开展示。而图像文件夹位于存储目录中。
醇>
我错过了什么吗?
答案 0 :(得分:1)
Form::image()
创建一个使用文件资源的HTML输入。渲染此输入及其图像的路径将不直接调用您的GET
路线。该框架假定您提供了一个静态路径,并且默认情况下只是将其映射到public
目录,以便浏览器检索资源。
您将图标保留在storage
中,这意味着这些文件不公开。如果您在基于Linux的环境中工作或在本地使用Homestead,那么在客户端使图标可用的最简单方法是创建从public
文件夹到storage
的符号链接,像这样:
ln -s /home/vagrant/Code/myproject/storage/SplashScreenIcons /home/vagrant/Code/myproject/public/MySplash
然后,您可以像往常一样使用Form帮助程序:
{!! Form::image('/MySplash/1/file.png', $alt="Photo", null) !!}
或使用asset()
帮助程序:
<input src="{{'MySplash/1/file.png'}}" type="image">
要记住的一件事是,您还需要生产中的符号链接,例如:作为部署钩子。