我在Laravel中编写了一些代码,以仅显示mysql数据库中的图像,在Post表中。
这是显示图像的功能
public function index()
{
$posts = Post::all()->pluck('image');
return response()->json(['images' => $posts]);
}
这是我得到的响应,它在 JSON 数组中显示图像文件名
{
"images": [
"1509695371.jpg",
"1509696465.jpg",
"1509697249.jpg"
]
}
但我想用完整的 URL 显示它们,就像下面的 json 格式一样。在该函数中使用Laravel雄辩会更好,但不使用sql连接。
{
"images": [
"http://localhost:8000/images/1509695371.jpg",
"http://localhost:8000/images/1509696465.jpg",
"http://localhost:8000/images/1509697249.jpg"
]
}
任何帮助将不胜感激!
您可以在集合上使用映射方法:
public function index()
{
$posts = Post::all()->pluck('image')->map(function($image){
return "http://localhost:8000/images/".$image;
});
return response()->json(['images' => $posts]);
}
一种解决方案是创建一个资产服务,它可以有将路径附加到图像的方法:assetLink('images', $image)
。
为此提供了一个示例实现:
public function link(string $path, string $fileName): string
{
return sprintf(
'%s/%s/%s',
env('APP_URL'),
$path,
$fileName,
)
}
现在,您需要附加到多个路径。只需创建一个单独的方法,该方法采用数组并使用上述方法对其进行迭代。再比如:
public function linkArray(string $path, array $files): array
{
return array_map(function ($fileName) {
return $this->link($path, $fileName)
}, $files)
}
然后你可以这样称呼它:$assetsService->linkArray('images', $files)
.请记住,您可以使用依赖注入来获取由 laravel 的容器实例化的服务。
这为您提供了一组可重用的文件路径方法,而不会使数据库执行不必要的工作。服务是小班的,成本很低,但给你很多透明度。您可以定义使用服务的目的或何时将某些内容定义为服务。
这可以通过一个简单的循环来处理:
$posts = Post::all()->pluck('image');
foreach($posts AS $index => $image){
$posts[$index] = url("/images/".$image);
}
url()
帮助程序根据您的配置和传递的路径返回完全限定的 URL,因此
url("/images/1509695371.jpg")
应该返回
http://localhost:8000/images/1509695371.jpg
编辑:要包含所有数据,但仍images
格式,您需要删除->pluck()
函数和循环$posts
,然后$post->images
:
$posts = Post::all();
foreach($posts AS $post){
foreach($post->images AS $index => $image){
$posts->images[$index] = url("/images/".$image);
}
}