Laravel从特定路径生成虚假图片

3
我正在使用Laravel开发一个商业网站,我想通过创建一个工厂来生成假图片,以使测试更容易,但是由于我不知道如何在代码中添加图片路径,因此无法实现。以下是生成数据库中假数据的代码: 我在YouTube上看到了一段培训视频,在其中通过spatie/laravel-medialibrary包将媒体信息附加到Laravel应用程序中,但这并不清楚。有没有人能够解释一下?

3
把代码放到你的问题中,不要只放一张图片。 - N69S
更新了这些句子。 - krishna Prasad
3个回答

1
你正在正确使用 faker 创建图片。
您需要运行以下命令:
php artisan storage:link

接下来,您可以使用以下代码访问图像:

<img src="/storage/images/{{$product->image}}">

只是为了更好地理解,Laravel从哪里获取图像以集成到我的应用程序中?从互联网上获取还是其他途径? - Ramses Kouam
Faker库从互联网上获取图像,具体来说是从http://lorempixel.com/获取。您也可以将图像放在项目的public/文件夹中并使用它们。它们将以相同的方式访问,您只需要确保指定正确的路径即可。 - Alex
我已经尝试过它并且它有效,现在我想使用计算机中包含图像的文件夹来执行相同的操作,我该怎么办? - Ramses Kouam
你需要将图片复制到你的Laravel项目中。你应该有一个public文件夹,在其中创建一个名为images的新文件夹,并将图片复制到其中。然后,你只需要指定文件位置来加载图片。 - Alex
我已经尝试过了,但是它并没有起作用。我已将路径“public/storage/images”更改为“public/img”,然后在Laravel Tinker中执行了工厂方法以上传到我的数据库,但它总是从lorempixel获取图像。 - Ramses Kouam
1
啊,我现在明白你的意思了。我认为你不能告诉faker使用你自己的图片。你需要编写自己的逻辑来从该文件夹中随机选择图像。请查看以下内容以实现此功能:https://dev59.com/4p3ha4cB1Zd3GeqPTmIy - Alex

0

这是我的答案

function random_pic($dir)
{
    $files = glob($dir . '/*.*');
    $file = array_rand($files);
    return $files[$file];
}

$factory->define(Business::class, function (Faker $faker) {
    return [
        //
        'name' => $faker->name,
        'license' => random_pic('public/tmp/license')
    ];
});



0

这在 Laravel 8 中对我有效。

image 的值是本地机器上存储上传图像的 client 目录的路径。当我在 tinker 中运行此命令时--App\Models\Client::factory()->create()--一个图像被上传到 clients 目录,并且图像文件名存储在数据库中(见下文)。我相信,image() 需要五个参数。

enter image description here

enter image description here

<?php

namespace Database\Factories;

use App\Models\Client;
use Illuminate\Database\Eloquent\Factories\Factory;

class ClientFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Client::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'first_name'  => $this->faker->firstName,
            'last_name'   => $this->faker->lastName,
            'email'       => $this->faker->unique()->safeEmail,
            'phone'       => $this->faker->phoneNumber,
            'image'       => $this->faker->image('public/assets/images/uploaded/clients', 400, 300, null, false),
            'address'     => $this->faker->streetAddress,
            'city'        => $this->faker->city,
            'state'       => $this->faker->stateAbbr,
            'zip'         => $this->faker->postcode,
            'country'     => $this->faker->country,
            'description' => $this->faker->paragraph
        ];
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接