uploadedfile subir inputfile fileinput example archivos php yii yii-extensions

php - subir - yii2 upload file



Yii: cómo usar actionupload() en actioncreate() (1)

Soy yiibie y estoy tratando de usar la función uploadaction() en la función createaction() para poder subir videos y también administrar videos. Estoy usando la extensión de multiuploadfile . No sé cómo combinar la función de carga en la función de creación. Este es el código de mi VideoController que tiene las actionUpload() y actioncreate() .

<?php class VideoController extends RController { /** * @var string the default layout for the views. Defaults to ''//layouts/column2'', meaning * using two-column layout. See ''protected/views/layouts/column2.php''. */ public $layout=''//layouts/admin''; /** * @return array action filters */ public function filters() { return array( // ''accessControl'', // perform access control for CRUD operations // ''postOnly + delete'', // we only allow deletion via POST request ''rights'', ); } /** * Specifies the access control rules. * This method is used by the ''accessControl'' filter. * @return array access control rules */ public function accessRules() { return array( array(''allow'', // allow all users to perform ''index'' and ''view'' actions ''actions''=>array(''index'',''view''), ''users''=>array(''*''), ), array(''allow'', // allow authenticated user to perform ''create'' and ''update'' actions ''actions''=>array(''create'',''update''), ''users''=>array(''@''), ), array(''allow'', // allow admin user to perform ''admin'' and ''delete'' actions ''actions''=>array(''admin'',''delete''), ''users''=>array(''admin''), ), array(''deny'', // deny all users ''users''=>array(''*''), ), ); } /** * Displays a particular model. * @param integer $id the ID of the model to be displayed */ public function actionView($id) { $this->render(''view'',array( ''model''=>$this->loadModel($id), )); } /** * Creates a new model. * If creation is successful, the browser will be redirected to the ''view'' page. */ public function actionCreate() { $model=new Video; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if(isset($_POST[''Video''])) { $model->attributes=$_POST[''Video'']; if($model->save()) $this->redirect(array(''view'',''id''=>$model->id)); } $this->render(''create'',array( ''model''=>$model, )); } /** * Updates a particular model. * If update is successful, the browser will be redirected to the ''view'' page. * @param integer $id the ID of the model to be updated */ public function actionUpdate($id) { $model=$this->loadModel($id); // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if(isset($_POST[''Video''])) { $model->attributes=$_POST[''Video'']; if($model->save()) $this->redirect(array(''view'',''id''=>$model->id)); } $this->render(''update'',array( ''model''=>$model, )); } /** * Deletes a particular model. * If deletion is successful, the browser will be redirected to the ''admin'' page. * @param integer $id the ID of the model to be deleted */ public function actionDelete($id) { if(Yii::app()->request->isPostRequest) { // we only allow deletion via POST request $this->loadModel($id)->delete(); // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser if(!isset($_GET[''ajax''])) $this->redirect(isset($_POST[''returnUrl'']) ? $_POST[''returnUrl''] : array(''admin'')); } else throw new CHttpException(400,''Invalid request. Please do not repeat this request again.''); } /** * Lists all models. */ public function actionIndex() { $dataProvider=new CActiveDataProvider(''Video''); $this->render(''index'',array( ''dataProvider''=>$dataProvider, )); } /** * Manages all models. */ public function actionAdmin() { $model=new Video(''search''); $model->unsetAttributes(); // clear any default values if(isset($_GET[''Video''])) $model->attributes=$_GET[''Video'']; $this->render(''admin'',array( ''model''=>$model, )); } public function actionUpload() { Yii::import("ext.EAjaxUpload.qqFileUploader"); $folder=Yii::getPathOfAlias(''webroot'').''/video/'';// folder for uploaded files $allowedExtensions = array("mp4","3gp");//array("jpg","jpeg","gif","exe","mov" and etc... $sizeLimit = 100 * 1024 * 1024;// maximum file size in bytes $uploader = new qqFileUploader($allowedExtensions, $sizeLimit); $result = $uploader->handleUpload($folder); $return = htmlspecialchars(json_encode($result), ENT_NOQUOTES); $fileSize=filesize($folder.$result[''filename'']);//GETTING FILE SIZE $fileName=$result[''filename''];//GETTING FILE NAME //$img = CUploadedFile::getInstance($model,''image''); echo $return;// it''s array } /** * Returns the data model based on the primary key given in the GET variable. * If the data model is not found, an HTTP exception will be raised. * @param integer $id the ID of the model to be loaded * @return Video the loaded model * @throws CHttpException */ public function loadModel($id) { $model=Video::model()->findByPk($id); if($model===null) throw new CHttpException(404,''The requested page does not exist.''); return $model; } /** * Performs the AJAX validation. * @param Video $model the model to be validated */ protected function performAjaxValidation($model) { if(isset($_POST[''ajax'']) && $_POST[''ajax'']===''video-form'') { echo CActiveForm::validate($model); Yii::app()->end(); } } }

Por favor, ayúdenme con esto, gracias.


Puede llamar a actionUpload() en actionCreate() usando $this pero debe verificar cómo usará los resultados de actionUpload dependiendo de lo que desee:

public function actionCreate() { $model = new Video; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if (isset($_POST[''Video''])) { $model->attributes = $_POST[''Video'']; $upload_results = $this->actionUpload(); //Do something with $upload_results here if ($model->save()) { //Or after model saving do related saving with $upload_results here $this->redirect(array(''view'', ''id''=>$model->id)); } } $this->render(''create'', array( ''model''=>$model, //''upload_results ''=>$upload_results , )); }