سلام دوستان.
به دلایلی میخوام کاربر برای گالری تصاویر حداکثر 3 تا عکس بتونه آپلود کنه و سه تا input جدا واسش درنظر گرفتم.
حالا واسه آپلود عکس با 3 input جدا، بهینه ترین روش واسه آپلود چیه؟
منظورت از بهترین روش چیه؟!
ساختار منظورته یا نوشتن کد آپلود؟
معمولا اگر از ۱ عکس بیشتر باشه میام یک جدول دیگه واس ذخیره آدرس عکس ها استفاده میکنم و از ریلیشن ها بهره میبرم
اگر منظورت نحوه کدزنش هست یک فاکشن آپلودر مینویسم و فایل ها رو بهش میدم اون فاکشن برام عکس ها رو اپلود میکنه و مسیر رو برمیگردونه که توی متد ذخیرم ازش استفاده میکنم
@juza66
جدول جدا در نظر گرفتم به صورت زیر:
Schema::create('job_galleries', function (Blueprint $table) {
$table->id();
$table->foreignId('job_id')->constrained()->onDelete('CASCADE');
$table->string('image1');
$table->string('image2');
$table->string('image3');
$table->timestamps();
});
سه تا input هم به صورت زیر هستن:
<input type="file" name="image1" id="fileInput" class="drop-zoon__file-input" accept="image/*">
<input type="file" name="image2" id="fileInput" class="drop-zoon__file-input" accept="image/*">
<input type="file" name="image3" id="fileInput" class="drop-zoon__file-input" accept="image/*">
فانکشن آپلود هم به صورت زیر نوشتم:
public function uploadImages($images = null) {
$path = 'upload/images';
if (request()->hasFile('image1') && $files = request()->file('image1')) {
$images = $files->store($path, 'public_files');
}
return $images;
}
کنترلر:
public function store(Job $job)
{
$images = $this->uploadImages();
$data['image1'] = $images;
$job->gallery()->create($data);
return redirect()->route('jobs.gallery.index', ['job' => $job->id]);
}
الان کد بالا به درستی عکس رو آپلود میکنه.
حالا مشکل اینجاست که من واسه سه تا input فانکشنمو به چه صورت بنویسم؟
کدمو به صورت زیر نوشتم و به درستی کار میکنه ولی بهینه نیست، ممنون میشم کمکم کنید.
protected function uploadImage1($images = '') {
$path = 'upload/images';
if (request()->hasFile('image1') && $files = request()->file('image1'))
$images = $files->store($path, 'public_files');
return $images;
}
protected function uploadImage2($images = '') {
$path = 'upload/images';
if (request()->hasFile('image2') && $files = request()->file('image2'))
$images = $files->store($path, 'public_files');
return $images;
}
protected function uploadImage3($images = '') {
$path = 'upload/images';
if (request()->hasFile('image3') && $files = request()->file('image3'))
$images = $files->store($path, 'public_files');
return $images;
}
public function store(Request $request, Job $job)
{
$image1 = $this->uploadImage1();
$image2 = $this->uploadImage2();
$image3 = $this->uploadImage3();
if ($request->hasFile('image1')) {
$data['image1'] = $image1;
} else
$data['image1'] = null;
if ($request->hasFile('image2')) {
$data['image2'] = $image2;
} else
$data['image2'] = null;
if ($request->hasFile('image3')) {
$data['image3'] = $image3;
} else
$data['image3'] = null;
$job->gallery()->create($data);
return redirect()->route('jobs.gallery.index', ['job' => $job->id]);
}
سلام
میتونی از این پکیج استفاده کنی
کار کردن باهاش راحته و امکان ریسایز کردن عکس ها رو هم بهت میده
موفق باشی
تنها راه و البته بهترین راه استفاده از جداول واسط و ریلیشن هست هیچ راه حل منطقی دیگه ای نداره
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟