Api of Multiple images in yii2 not working

Hey there I am beginner in yii2 and learning to create a api in yii2 as I stuck when my request has given me only 1 array of file instead of multiple

Below is my model file

<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "question_attachment".
 *
 * @property int $id
 * @property int $question_id
 * @property string $attachment
 */
class QuestionAttachment extends \yii\db\ActiveRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'question_attachment';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['attachment'], 'required'],
            [['question_id'], 'integer'],
            //[['attachment'], 'string', 'max' => 255],
            [['attachment'], 'file', 'maxFiles' => 10,'skipOnEmpty' => true, 'extensions' => 'png, jpge, jpg, pdf, mp4', 'mimeTypes' => 'image/jpeg, image/png, image/jpe'],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'question_id' => 'Question ID',
            'attachment' => 'Attachment',
        ];
    }

    public function getQuestions(){
        return $this->hasOne(Question::className(), ['id' => 'id']);
    }
}

And This below code is of action in which I am uploading a multiple images

public function actionMultiple($params=['attributes'=>[
        ['name'=>'QuestionAttachment[attachment]','type'=>'file','description'=>'']],'auth'=>0,'method'=>'POST'])
    {
        $model = new QuestionAttachment();
        $model->question_id = '1';

        if (Yii::$app->request->isPost) {
            $model->attachment = UploadedFile::getInstances($model, 'attachment');
            if(!$model->attachment){
                return array('status'=>false,'message'=>'Please select a photo.');
            }

            if ($model->attachment && $model->validate()) {
                foreach ($model->attachment as $file) {
                    $file->saveAs(Yii::$app->basePath.'/../img_assets/questions/' . $file->baseName . '.' . $file->extension);
                }
            }
        }print_r($model);die();

        return array('status' => true, 'message' => 'Error');
    }

And this is what i got response for this action code

common\models\QuestionAttachment Object
(
    [_attributes:yii\db\BaseActiveRecord:private] => Array
        (
            [question_id] => 1
            [attachment] => Array
                (
                    [0] => yii\web\UploadedFile Object
                        (
                            [name] => farcry1.jpg
                            [tempName] => /tmp/phpUBNOW2
                            [type] => image/jpeg
                            [size] => 2648781
                            [error] => 0
                            [_tempResource:yii\web\UploadedFile:private] => Array
                                (
                                )

                        )

                )

        )

    [_oldAttributes:yii\db\BaseActiveRecord:private] => 
    [_related:yii\db\BaseActiveRecord:private] => Array
        (
        )

    [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array
        (
        )

    [_errors:yii\base\Model:private] => Array
        (
        )

    [_validators:yii\base\Model:private] => ArrayObject Object
        (
            [storage:ArrayObject:private] => Array
                (
                    [0] => yii\validators\RequiredValidator Object
                        (
                            [skipOnEmpty] => 
                            [requiredValue] => 
                            [strict] => 
                            [message] => {attribute} cannot be blank.
                            [attributes] => Array
                                (
                                    [0] => attachment
                                )

                            [on] => Array
                                (
                                )

                            [except] => Array
                                (
                                )

                            [skipOnError] => 1
                            [enableClientValidation] => 1
                            [isEmpty] => 
                            [when] => 
                            [whenClient] => 
                            [_events:yii\base\Component:private] => Array
                                (
                                )

                            [_eventWildcards:yii\base\Component:private] => Array
                                (
                                )

                            [_behaviors:yii\base\Component:private] => 
                        )

                    [1] => yii\validators\NumberValidator Object
                        (
                            [integerOnly] => 1
                            [max] => 
                            [min] => 
                            [tooBig] => 
                            [tooSmall] => 
                            [integerPattern] => /^\s*[+-]?\d+\s*$/
                            [numberPattern] => /^\s*[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\s*$/
                            [attributes] => Array
                                (
                                    [0] => question_id
                                )

                            [message] => {attribute} must be an integer.
                            [on] => Array
                                (
                                )

                            [except] => Array
                                (
                                )

                            [skipOnError] => 1
                            [skipOnEmpty] => 1
                            [enableClientValidation] => 1
                            [isEmpty] => 
                            [when] => 
                            [whenClient] => 
                            [_events:yii\base\Component:private] => Array
                                (
                                )

                            [_eventWildcards:yii\base\Component:private] => Array
                                (
                                )

                            [_behaviors:yii\base\Component:private] => 
                        )

                    [2] => yii\validators\FileValidator Object
                        (
                            [extensions] => Array
                                (
                                    [0] => png
                                    [1] => jpge
                                    [2] => jpg
                                    [3] => pdf
                                    [4] => mp4
                                )

                            [checkExtensionByMimeType] => 1
                            [mimeTypes] => Array
                                (
                                    [0] => image/jpeg
                                    [1] => image/png
                                    [2] => image/jpe
                                )

                            [minSize] => 
                            [maxSize] => 
                            [maxFiles] => 10
                            [minFiles] => 0
                            [message] => File upload failed.
                            [uploadRequired] => Please upload a file.
                            [tooBig] => The file "{file}" is too big. Its size cannot exceed {formattedLimit}.
                            [tooSmall] => The file "{file}" is too small. Its size cannot be smaller than {formattedLimit}.
                            [tooMany] => You can upload at most {limit, number} {limit, plural, one{file} other{files}}.
                            [tooFew] => You should upload at least {limit, number} {limit, plural, one{file} other{files}}.
                            [wrongExtension] => Only files with these extensions are allowed: {extensions}.
                            [wrongMimeType] => Only files with these MIME types are allowed: {mimeTypes}.
                            [attributes] => Array
                                (
                                    [0] => attachment
                                )

                            [on] => Array
                                (
                                )

                            [except] => Array
                                (
                                )

                            [skipOnError] => 1
                            [skipOnEmpty] => 1
                            [enableClientValidation] => 1
                            [isEmpty] => 
                            [when] => 
                            [whenClient] => 
                            [_events:yii\base\Component:private] => Array
                                (
                                )

                            [_eventWildcards:yii\base\Component:private] => Array
                                (
                                )

                            [_behaviors:yii\base\Component:private] => 
                        )

                )

        )

    [_scenario:yii\base\Model:private] => default
    [_events:yii\base\Component:private] => Array
        (
        )

    [_eventWildcards:yii\base\Component:private] => Array
        (
        )

    [_behaviors:yii\base\Component:private] => Array
        (
        )

)

What I am doing wrong in this code?

Hi,

You have basically set up a workflow for uploading one image. This might actually be a good thing; you can choose to make a frontend that handles all image uploads as separate requests.

Did you actually include multiple files in the api request?

Cheers,
Simon

@esquire900 Thnx for reply
I know I have done single image code after If i am tried of not running my code that’s why i removed multiple image code

This is what i got right now

 public function actionMultiple($params=['attributes'=>[
        ['name'=>'QuestionAttachment[attachment][]','type'=>'file','description'=>'']],'auth'=>0,'method'=>'POST'])
    {
        $model = new QuestionAttachment();
        $model->question_id = '1';

        if (Yii::$app->request->isPost) {
            $model->attachment = UploadedFile::getInstances($model, 'attachment');
            foreach ($model->attachment as $images) {
                $model = new QuestionAttachment();
                $BasePath       =  Yii::$app->basePath.'/../img_assets/questions/';
                $filename       =  time().'-'.$images->name;
                print_r($images);
             
                $countimages = count($images);
                print_r($countimages);
            }die();
                if($images->saveAs($BasePath.$filename))
                {
                    //$model = new QuestionAttachment();
                    $model->attachment = $filename;
                    if ($model->validate()) {
                        $model->save();
                        return array('status' => true , 'message' => 'Multiple Images is Saved Finally');
                    } else {
                        return array('status' => false , 'message' => 'Not Again');
                    }
                }
            //}        
            return array('status' => false, 'message' => 'Error');
        }   
    }

As it runs successful but in my db and my img directory there will be only one image entered

1 Like