Merhaba arkadaşlar,
Controller içerisinde yaptıgım bir 'edit' action'u mevcut. Formdan gelen çok alan olduğu için form request kullanarak validation kısmını ayrıp controller içerisini kısaltmak istedim.
Kodu bayaa kısalttım ve çalışıyor ama tam olarak doğru yapıp yapmadığımdan emin olamadım. Validation içerisindeki alanlardan birisi logo.
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'setting_logo' => 'bail|mimes:jpeg,jpg,png|max:2048',
//other fields...
];
}
/**
* Update the specified resource in storage.
* @param \App\Http\Requests\SettingUpdateRequest $request
* @param Setting $setting
*/
public function update(SettingUpdateRequest $request, Setting $setting)
{
abort_if(Gate::denies('admin-action'), 403);
$old_logo = $setting->setting_logo;
$setting->update($request->validated());
if ($request->hasFile('setting_logo')) {
$setting->setting_logo = prepare_image_path($request->file('setting_logo'), 'logo', 170, 95);
Storage::delete([$old_logo]);
}
$setting->save();
return back()->withSuccess('Güncelleme Başarılı!');
}
Şimdi $request->validated() içerisinden form request'te validation'u geçmiş tüm veriler geliyor. Ancak gelen resmi işlemden geçirerek kayıt etmem gerekiyor. prepare_image_path 'de yazdığım basit bir helper, resize işlemleri için vs..
Uzun uzun tüm alanları yazmamak için bu şekilde update işlemi yaptırıyorum. Ardından formdan logoda geliyorsa gördüğünüz gibi tekrar işlemden geçiriyorum. Sonda da tekrar save() kullanarak resize edilmiş ve dosya ismi yeniden düzenlenmiş resmi veritabanına basıyorum.
save() işlemini koşulun dışına aldım çünkü bu şekilde bir kaç tane daha resim alanı var. Soruyu uzatmamak için onları dahil etmedim. Resim gelirse koşul ya da koşullar devreye giriyor yani.
Şimdi bu şekilde 2 defa işlem yapmışım gibi geldi. Resim ya da resimler önce upload oluyor geldiği gibi validation'u geçerse tabii, ardından tekrar üzerinden işlem yaptırıyorum.
Şuradaki mantığı;
$setting->setting_logo = prepare_image_path($request->file('setting_logo'), 'logo', 170, 95);
Storage::delete([$old_logo]);
form request içerisinde kullanıp controller da direkt olarak
$setting->update($request->validated());
return back()->withSuccess('Güncelleme Başarılı!');
şeklinde işi bitirme şansım var mı?