How to create a file to load a REST API controller for Yii2

I use the Ionic framework to develop mobile applications. The Yii2 API code below can be used to download files, but it does not work. It shows the following errors:

i) Undefined offset: 0.

ii) yii \ db \ BaseActiveRecord-> save ()

public function actionNew() {
    $model = new Apiprofile();
    $userid = $_REQUEST['user_id'];
    $photo = $_FILES['photo'];
    $model->user_id = $userid;
    $model->photo = $photo;
    $name = $model->user_id;
    $model->file = UploadedFile::getInstance($model, 'photo');

    if($model->file) {
        $model->file->saveAs('uploads/photos/'.$name.'.'.$model->file->extension);
        $model->photo = $name.'.'.$model->file->extension;
        $model->save();
    }

    $name = $model->user_id;

    if($model->save()) {
        echo json_encode(array('status'=>1,'data'=>$model->attributes),JSON_PRETTY_PRINT);
    } else {
        echo json_encode(array('status'=>0,'error_code'=>400,'errors'=>$model->errors),JSON_PRETTY_PRINT);
    }
}
+4
source share
1 answer

Hi, if you want, I will share my helper class, which I used to work with images in Yii2 REST.

In the base folder of your application, create the folder components and inside this folder create two folder assistants and objects.

 -->assets
    -->componests
            ----->helpers
            ----->objects
    -->config
    -->...

after that create class FileUpload inside the folder with objects and place this code inside.

<?php
namespace app\components\objects;


class FileUpload
{
    public $error=[];
    public $isSuccess=false;
    public $file;
    public $ready_path;
    public $file_type;
    public $file_size;
    public $file_extension;
    public $file_tmp_name;

    public $file_name;
    public $save_path;

    public function __construct($file,$save_path,$ready_path,$required=false)
    {
        if(!isset($_FILES[$file])){
            if($required){
                $this->error=['message'=>$file.' is required'];
            }
            return $this;
        }
        $this->save_path=$save_path;
        $this->ready_path=$ready_path;
        $this->file_type = strtolower($_FILES[$file]['type']);
        $this->file_name = $_FILES[$file]['name'];
        $this->file_tmp_name=$_FILES[$file]['tmp_name'];
        $this->file_size = $_FILES[$file]['size'];
        $this->file_extension=pathinfo($this->file_name, PATHINFO_EXTENSION);
    }

    public function setError($error){
        if(empty($this->error)){
            $this->error=$error;
        }
    }

}

FileUploadHelper, .

<?php
namespace app\components\helpers;
use app\components\objects\FileUpload;
use Yii;

class  FileUploadHelper
{

    private $allowed_files;
    private $file_size;
    const IMAGE='image';
    const FILE='file';

    /** File Upload
     * @param string $file_name
     * @param string $save_path
     * @param string $ready_path
     * @param string $type
     * @param bool $required

     * @return \app\components\objects\FileUpload
     */
    public static function fileUpload($file_name,$save_path,$ready_path,$type,$required=false){

        $image=new FileUpload($file_name,$save_path,$ready_path,$required);
        if($type==self::FILE){
            $allowed_files=Yii::$app->params['allowed_files'];
            $file_size=Yii::$app->params['file_max_size'];
        }else{
            $allowed_files=Yii::$app->params['allowed_files'];
            $file_size=Yii::$app->params['file_max_size'];
        }
        $dir = realpath(Yii::$app->basePath);
        if(in_array($image->file_type,$allowed_files)
            &&$image->file_size<$file_size){
            $filename = $file_name.'_'.md5(uniqid(time()).time() . '_' . date('YmdHis')) . '.' . $image->file_extension;
            $file = $dir . $image->save_path . $filename;
            if(move_uploaded_file($image->file_tmp_name, $file)){
                $image->file=$image->ready_path. $filename;
                $image->isSuccess=true;
                $image->setError(['message'=>'file_upload_success']);
            }else{
                $image->setError(['message'=>'error_try_again']);
            }
        }else{
            $image->setError(['message'=>'file_should_be_no_more_than_given_size']);
        }
        return $image;
    }


    /** Delete File
     * @param string $ready_file
     */
    public static function deleteImage($ready_file){
        $dir = realpath(Yii::$app->basePath);
        if (strpos($ready_file, 'default') === false){
            if(is_file($dir.'/web/'.$ready_file)){
                unlink($dir.'/web/'.$ready_file);
            }
        }
    }
}

.

public function actionEditAvatar($id)
    {
        $product = Product::findOne($id);
        if( $product ){
                $old_avatar=$product->avatar;
                $image=FileUploadHelper::fileUpload(ProductForm::AVATAR,Yii::$app->params['product_path'],Yii::$app->params['product_ready_path'],FileUploadHelper::IMAGE);
                if($image->isSuccess) {
                    $product->avatar = $image->file;
                    if($product->save()){
                        FileUploadHelper::deleteImage($old_avatar);
                        return $product->avatar;
                    }

                }
            return $image->error;
        }
        throw new NotFoundHttpException;
    }

. FileUploadHelper , "fileUpload" "deleteImage". FileUploadHelper fileUpload ('_', 'save_path', 'ready_path', 'type') "save_path" - , . "ready_path" - URL. Yii:: $app- > params [];

, isSuccess. , . . deleteImage ('saved_image_url'); . , . , , . web/uploads , .

return [
    'adminEmail' => 'admin@example.com',

    'allowed_images'                   => [ 'image/jpeg', 'image/gif', 'image/png' ],
    'allowed_files'                    => [ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/msword', 'application/pdf','image/jpeg', 'image/gif', 'image/png'],

    'image_max_size'                   => 2097152,
    'file_max_size'                    => 8388608,

    'owner_document_path'              => '/web/uploads/owner_document/',
    'owner_document_ready_path'        => 'uploads/owner_document/',

    'product_path'                     => '/web/uploads/product/',
    'product_ready_path'               => 'uploads/product/',

    'complain_photo_path'              => '/web/uploads/complain_photo/',
    'complain_photo_ready_path'        => 'uploads/complain_photo/',

    'owner_path'                       => '/web/uploads/owner/',
    'owner_ready_path'                 => 'uploads/owner/',


    'staff_path'                       => '/web/uploads/staff/',
    'staff_ready_path'                 => 'uploads/staff/',
];
0

All Articles