سلام دوستان.
به دلایلی میخوام کاربر برای گالری تصاویر حداکثر 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]);
}سلام
میتونی از این پکیج استفاده کنی
کار کردن باهاش راحته و امکان ریسایز کردن عکس ها رو هم بهت میده
موفق باشی
@mrkhodarahmii
اگه نخوام از این پکیج استفاده کنم، کدمو چه تغییری باید بدم؟
تنها راه و البته بهترین راه استفاده از جداول واسط و ریلیشن هست هیچ راه حل منطقی دیگه ای نداره