منبع اصلی نوشتار زیر در این لینک قرار دارد

آپلود فایل در Yii

برای آپلود هر نوع فایلی با فریمورک Yii، به ویژه برای فایلهای تصاویر که استفاده و کاربرد زیادی هم دارند،  از مراحل زیر پیروی کنید. البته باید اشاره کرد که این مراحلی طوری بیان شده اند که هم برای اضافه کردن تصویر جدید و هم برای ویرایش تصویر قبلی کاربرد دارد.

مدل(Model)

ابتدا با فایل مدل شروع می کنیم. در این فایل باید قوانین مربوط به نوع فایل برای اعتبارسنجی مناسب آن اعمال کنیم.

array('image', 'file','types'=>'jpg, gif, png', 'allowEmpty'=>true, 'on'=>'update'),

در قانون بالا علاوه بر این که نوع فیلد را از نوع فایل تعیین می کنیم، که منجر به اعتبار سنجی توسط  CFileValidator می شود، نوع فایل و اجازه خالی بودن و یا نبودن در سناریوی update را هم به آن می دهیم.

کنترلر(Controller)

در کنترلر دوتا از اکشن ها هستند که باید در آنها نیز تغییراتی را اعمال کنیم. یکی create و دیگری update است. در اکشن create به صورت زیر عمل می کنیم:

public function actionCreate()
    {
        $model=new Banner;  // this is my model related to table
        if(isset($_POST['Banner']))
        {
            $rnd = rand(0,9999);  // generate random number between 0-9999
            $model->attributes=$_POST['Banner'];

            $uploadedFile=CUploadedFile::getInstance($model,'image');
            $fileName = "{$rnd}-{$uploadedFile}";  // random number + file name
            $model->image = $fileName;

            if($model->save())
            {
                $uploadedFile->saveAs(Yii::app()->basePath.'/../banner/'.$fileName);  // آپلود فایل به مسیر  rootDirectory/banner/
                $this->redirect(array('admin'));
            }
        }
        $this->render('create',array(
            'model'=>$model,
        ));
    }

و برای اکشن update به ترتیب زیر:

public function actionUpdate($id)
    {
        $model=$this->loadModel($id);

        if(isset($_POST['Banner']))
        {
            $_POST['Banner']['image'] = $model->image;
            $model->attributes=$_POST['Banner'];

            $uploadedFile=CUploadedFile::getInstance($model,'image');

            if($model->save())
            {
                if(!empty($uploadedFile))  // check if uploaded file is set or not
                {
                    $uploadedFile->saveAs(Yii::app()->basePath.'/../banner/'.$model->image);
                }
                $this->redirect(array('admin'));
            }

        }

        $this->render('update',array(
            'model'=>$model,
        ));
    }

 نکته: در هر دو اکشن بالا سعی شده تا نام فایل ها تصادفی در نظر گرفته شوند تا تداخل و خطایی رخ ندهد.

ویو(View)

و در نهایت نوبت به فایل ویو می رسد.

$form = $this->beginWidget(
    'CActiveForm',
    array(
        'id' => 'upload-form',
        'enableAjaxValidation' => false,
        'htmlOptions' => array('encrypt' => 'multipart/form-data'),
    )
);
// ...
<div class="row">
        <?php echo $form->labelEx($model,'image'); ?>
        <?php echo CHtml::activeFileField($model, 'image'); ?>  // by this we can upload image
        <?php echo $form->error($model,'image'); ?>
</div>
<?php if($model->isNewRecord!='1'){ ?>
<div class="row">
     <?php echo CHtml::image(Yii::app()->request->baseUrl.'/banner/'.$model->image,"image",array("width"=>200)); ?>  // Image shown here if page is update page
</div>
<?php
}
?>
// ...
$this->endWidget();

امیدوارم که مطلب کاربردی و مفید بوده باشد.

The post آپلود فایل در Yii appeared first on دست نوشته های یک تازه کار.



برچسب ها : , , , , , , , , ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد