Как задать имя загруженного файла вместо случайных чисел с помощью углерода в laravel

#php #database #laravel

Вопрос:

Когда я загружаю изображение, оно устанавливается в виде случайных чисел, таких как //15215653352.png. Но вместо этого у меня есть мои изображения , которые должны быть точными,и это означает,что у меня есть папка, в которой упорядочен набор изображений(digital_1.png, digital_2.png, digital_3.png…)

##Папка с изображениями находится в открытом доступе под названием imagg##

Внутри фабрики продуктов я использую это : 'image' => 'digital_'.$this->faker->unique()->numberBetween(1,28).'.png',

Чтобы добавить картинку, у меня есть этот код :

 $imageName = Carbon::now()->timestamp.'.'. $this->image->extension();
        $this->image->storeAs('imagg',$imageName,'public');
        $product->image = $imageName;
 

В items-component.blade.php:

   @foreach ($products as $product)
        <!-- grid item #1 -->
        <a href="{{route('product.details',$product->slug)}}">
        <div id="TEST" class="activities-grid-item bla" style=" background-image: url({{asset('imagg')}}/{{$product->image}}"  >

          <h1 class="activities-h1">
.
.
.
</a>
$endforeach
 

в filesystem.php:

'root' => storage_path('app'),

Таким образом , изображения не могут отображаться с этими случайными числами, но они должны иметь имя suc, которое имеет digital_x.png (в то время как x является переменной от 1 до 28 и существует в папке imagg).

Комментарии:

1. вы можете подсчитать количество изображений в каталоге и просто 1 для имени.

2. он должен быть отображен в цифровом виде_

Ответ №1:

Это должно сработать.

  try {
    $dir = 'folder/to_the_images/'; // path to the images
    if (is_dir($dir)) {
        $images = glob($dir . '{*.jpg, *.JPG, *.jpeg}');
        $imageName = 'digital_' . count($images)   1 . '.' . $this->image->extension();
        $this->image->storeAs('imagg', $imageName, 'public');
        $product->image = $imageName;
    }
} catch (Exception $exception) {
    die('saving images failed ' . $exception->getMessage());
}