У меня есть файл клика для редактирования в моем приложении laravel. в этой форме редактирования обновить данные до двух таблиц для транспортных средств и загрузок. У меня есть следующие коды в файлах редактирования кликов с лезвиями для загрузки таблицы,
@foreach( $vehicles-> uploads as $upload)
<img id="preview"
src="{{asset((isset($upload) && $upload->resized_name!='')?'images/'.$upload->resized_name:'images/noimage.png')}}"
height="200px" width="200px"/>
<input class="form-control" style="display:none" name="files[]" type="file" id="files" name="_token" value="{{ csrf_token() }}" enctype="multipart/form-data">
<br/>
<a href="javascript:changeProfile();">Add Image</a> |
<a class="button is-outlined" href="/myads/{{$upload->id}}/delete" onclick="return confirm('Are you sure to want to delete this record?')" >Delete</a></td>
<hr>
@endforeach
@endif
контроллер обновления,
$photos = $request->file('files');
if (!is_array($photos)) {
$photos = [$photos];
}
if (!is_dir($this->photos_path)) {
mkdir($this->photos_path, 0777);
}
for ($i = 0; $i < count($photos); $i++) {
$photo = $photos[$i];
$name = sha1(date('YmdHis') . str_random(30));
$save_name = $name . '.' . $photo->getClientOriginalExtension();
$resize_name = $name . str_random(2) . '.' . $photo->getClientOriginalExtension();
Image::make($photo)
->resize(250, null, function ($constraints) {
$constraints->aspectRatio();
})
->save($this->photos_path . '/' . $resize_name);
$photo->move($this->photos_path, $save_name);
$upload = Upload::find($id);
$upload->filename = $save_name;
$upload->resized_name = $resize_name;
$upload->original_name = basename($photo->getClientOriginalName());
$upload->vehicle_id = $vehicle->id;
$upload->save();
}
и маршрут,
Route::post('myads/{id}', [
'uses' => 'AppHttpControllersVehicleController@update',
])->name('vehicles.edit');
но когда я прикрепляю изображение и кнопки обновления, он не обновляет изображение в таблице uploads. как решить эту проблему?
Всего 2 ответа
Я думаю, что вы использовали неправильный метод в контроллере обновлений.
if (!is_array($photos)) {
$photos = [$photos];
}
Попробуйте этот метод для преобразования строки в массив.
if (!is_array($photos)) {
$photos = explode(' ', $photos);
}
Ваш код HTML неправильный.
Не используйте style="display:none"
в элементе input
. Браузер будет игнорировать его, если они будут скрыты.
Не объединяйте токен CSRF с входными файлами.
Попробуй это:
@foreach( $vehicles-> uploads as $upload)
<img id="preview" src="{{asset((isset($upload) && $upload->resized_name!='')?'images/'.$upload->resized_name:'images/noimage.png')}}" height="200px" width="200px"/>
<input class="form-control" name="files[]" type="file" id="files" enctype="multipart/form-data">
{{ csrf_field() }}
<br/>
<a href="javascript:changeProfile();">Add Image</a> |
<a class="button is-outlined" href="/myads/{{$upload->id}}/delete" onclick="return confirm('Are you sure to want to delete this record?')" >Delete</a>
<hr>
@endforeach