محمود خسروی
4 سال پیش توسط محمود خسروی مطرح شد
3 پاسخ

آپلود چند تصاویر و دخیره آن به صورت آرایه ای

من در فرم خودم یه multiple دارم و می خواهم چند تصاویر را آپلود کنم اما با خطا مواجه میشم خطا هم هیچ وقت ندیدم برای اولین بار است.

strncmp() expects parameter 1 to be string array given

My blade

<form action="{{ route('design-studios.store') }}" method="post" enctype="multipart/form-data">
    @csrf
    <div class="form-group">
        <label for="title">Title</label>
        <input type="text" class="form-control" id="title" name="title" value="{{ old('title') }}">
    </div>
   //......
    <div class="form-group">
        <fieldset class="border p-3">
            <legend>Slideshow</legend>
            <div class="form-group">
                <label for="sliders">Image</label>
                <input id="sliders" name="sliders[]" type="file" multiple class="form-control">
            </div>
        </fieldset>
    </div>
</form>

My Controller

public function store(Request $request)
{
    $design_studio = new DesignStudio;
    $design_studio->user_id = 1;
    $design_studio->title = $request->title;
    $design_studio->lang = $request->lang;
    $design_studio->body = $request->body;
    if($request->has('image')) {
        $image = $request->file('image');
        $filename = $image->getClientOriginalName();
        $image->move(public_path('images/design-studio'), $filename);
        $design_studio->image = $request->file('image')->getClientOriginalName();
    }
    if ($sliders = $request->file('sliders')) {
        foreach ($sliders as $slider) {
            $filename = $slider->getClientOriginalName();
            $slider->move(public_path('images/design-studio'), $filename);
             $design_studio->sliders = $slider->getClientOriginalName();
        }
    }
    $design_studio->save();
    $design_studio->categories()->attach($request->category);
    return redirect()->route('design-studios.index');
}

My Model

protected $casts = [
    'sliders' => array()
];

این هم موقع dd گرفتن بعد از حلقه

foreach ($sliders as $slider) {
    dd($slider);

دی دی


ثبت پرسش جدید
محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

@oxbir
مشکل رو پیدا کردم.
شما در خط زیر به ازای هر حلقه داری اسم جدید رو داخل متغیر میریزی!

$design_studio->sliders = $slider->getClientOriginalName();

به جای این کار یک آرایه بساز و هر بار که عکس آپلود میشه اسمش رو پوش کن داخل آرایه بعد به جای اون خط، در بیرون حلقه آرایه رو پاس بده.
البته دقت کنید برای این کار باید نوع داده اون ستون روی json باشه و آرایه رو هم با استفاده از json_encode ذخیره کنید.


سهیل حیدری
@hbr 4 سال پیش مطرح شد
0

سلام ببینید شما از base64 استفاده نمیکنید و دارید مستقیم فایل رو به صورت باینری میفرستید و برای اینکار باید از کتابخانه و ماژول دیگری مخصوص این کار استفاده کنید من php کار نکردم ولی قطعا ماژولی برای این کار داره. یه سرچ بکنید اگر هم دارید به صورت base64 پست میکنید که باید base64 رو تبدیل بکنید به فایل که این از امکانات داخلی خوده php هم هست


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
0

@oxbir
سلام.
پیشنهاد میکنم خط به خط داخل کنترلر رو با استفاده از dd بررسی کنید تا دقیق مشخص بشه از کدوم قسمت اررور داره میاد.


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

@oxbir
مشکل رو پیدا کردم.
شما در خط زیر به ازای هر حلقه داری اسم جدید رو داخل متغیر میریزی!

$design_studio->sliders = $slider->getClientOriginalName();

به جای این کار یک آرایه بساز و هر بار که عکس آپلود میشه اسمش رو پوش کن داخل آرایه بعد به جای اون خط، در بیرون حلقه آرایه رو پاس بده.
البته دقت کنید برای این کار باید نوع داده اون ستون روی json باشه و آرایه رو هم با استفاده از json_encode ذخیره کنید.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام