嘿,所以我想将我的图像放到索引上的幻灯片中。图像保存在storage/app
,然后从数据库中检索其余路径。
我设法在<img src>
标签上输出了正确的路径,标题得到了应有的输出,但是图像却没有。
我从控制器发送和数组,然后在我的视图中循环遍历它:
控制器:
public function index()
{
$projects = Project::all()->take(4);
return view('index' , compact('projects'));
}
索引检视
@foreach($projects as $project)
{{$storagePath = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix()}}
<li><img src="{{$storagePath.$project->fetchMedia->first()->public_name}}" title=" {{$project->name}}"></li>
@endforeach
HTML输出是正确的路径:“ / home / vagrant / project / storage / app / projects / Domaa6.jpg”
但它不显示图像。
我已经尝试使用HTML :: image帮助器,但也没有成功。
有没有办法让它按原样工作,还是我需要创建一个新的控制器来操作我的图像?
这fetchMedia
是模型上返回我的媒体的函数。
public function fetchMedia()
{
return $this->hasMany('App\Media');
}
您试图做的事在存储目录中是不可能的,但仅在公共目录中是可能的,而且暴露laravel存储目录的路径或URL会造成一些漏洞及其不良做法
但是,有一种解决方法:
首先,您需要一个Image包来在引用特定路由时动态生成图像,我建议您采用干预/图像处理/图像处理方法,该方法具有许多使图像管理变得轻而易举的方法。
为此,请执行以下步骤:
1.安装干预映像:
将干预图像添加到您的composer.json和 composer update
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.1.*",
"intervention/image": "2.*",
"intervention/imagecache": "2.*"
.....
在$ providers数组中,添加此程序包的服务提供者。
'Intervention\Image\ImageServiceProvider'
将此包的外观添加到$ aliases数组中。
'Image' => 'Intervention\Image\Facades\Image
'
在Laravel 5中配置干预图像
$ php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"
在Laravel 4中发布配置
$ php artisan config:publish intervention/image
有关更多安装详细信息,请参见https://github.com/Intervention/image
安装干预/图像后,您可以执行以下操作:
Image::make($path=storage_path('stock-photos/image1.jpg'));
2.设置将处理图像请求的路由
Route::get('stock-photos/{image}', function($image){
//do so other checks here if you wish
if(!File::exists( $image=storage_path("stock-photos/{$image}") )) abort(404);
return Image::make($image)->response('jpg'); //will ensure a jpg is always returned
});
3.然后在视图后面可以执行以下操作:
@foreach($projects as $project)
<li>
<img src="{{url('stock-photos/'. $project->fetchMedia->first()->public_name)}}" title="{{$project->name}}">
</li>
@endforeach
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句