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 ,
));
}