2015-12-06 32 views
-1

我是一個yiibie,我正在上傳視頻。我已使用uploadmultifile擴展名,並根據此鏈接http://www.yiiframework.com/extension/uploadmultifiles/在我的video view文件和我的videocontroller中進行了更改。視頻成功進入video folder(projectname/video),但它沒有出現名爲video的數據庫表。我希望當我通過projectname/video/create創建視頻時,應該在我輸入網址projectname/video/admin時顯示,以便我可以在這裏管理我的視頻,之後我可以在界面上簡單顯示所有視頻。我一直在尋找這一切,但沒有拿出一個sloution,請幫助我。 這是我的Video ControllerYii:如何在使用multiuploadfiles擴展時管理視頻

<?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)) 
     { 
     var_dump('ALL POST'); 
     var_dump($_POST); 
    } else { 
     var_dump('NO POST'); 
    } 

    if(isset($_POST['video'])) 
    { 
     var_dump('VIDEO POST'); 
     var_dump($_POST['video']); 

     $model->attributes=$_POST['video']; 
     $model->video = Video::getInstance($model, 'video'); 
     if($model->save(false)) 
      $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("3gp","mp4");//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(); 
     } 
    } 

} 

的代碼,這是我的view file

<?php 
/* @var $this VideoController */ 
/* @var $model Video */ 
/* @var $form BSActiveForm */ 
?> 

<?php $form=$this->beginWidget('bootstrap.widgets.BsActiveForm', array(
    'id'=>'video-form', 
    // Please note: When you enable ajax validation, make sure the corresponding 
    // controller action is handling ajax validation correctly. 
    // There is a call to performAjaxValidation() commented in generated controller code. 
    // See class documentation of CActiveForm for details on this. 
    'enableAjaxValidation'=>false, 
    'htmlOptions' => array(
     'enctype' => 'multipart/form-data', 
    ), 

     )); ?> 

    <p class="help-block">Fields with <span class="required">*</span> are required.</p> 
<?php echo $form->errorSummary($model); ?> 

<?php //echo $form->errorSummary($model); ?> 

    <?php echo $form->labelEx($model,'user_id'); ?> 
    <?php 

    $this->widget('ext.select2.ESelect2',array(
    'name'=>'video[user_id]', 
    'data'=>CHtml::listData(User::model()->findAll(), 'id', 'username'), //the whole available list 
    'htmlOptions'=>array(
     'placeholder'=>' search User name?', 
    //'options'=>$options, //the selected values 
    //'multiple'=>'multiple', 
    'style'=>'width:530px', 
), 
)); 
    ?> <br><br> 
    <?php echo $form->errorSummary($model); ?> 
<?php 
$this->widget('ext.EAjaxUpload.EAjaxUpload', 
array(
     'id'=>'uploadFile', 
     'config'=>array(
       'action'=>Yii::app()->createUrl('video/upload'), 
       'allowedExtensions'=>array("mp4","3gp"),//array("jpg","jpeg","gif","exe","mov" and etc... 
       'sizeLimit'=>1000*1024*1024,// maximum file size in bytes 
       'minSizeLimit'=>1*1024, 
       'auto'=>true, 
       'multiple' => true, 
       'onComplete'=>"js:function(id, fileName, responseJSON){ alert(fileName); }", 
       'messages'=>array(
           'typeError'=>"{file} has invalid extension. Only {extensions} are allowed.", 
           'sizeError'=>"{file} is too large, maximum file size is {sizeLimit}.", 
           'minSizeError'=>"{file} is too small, minimum file size is {minSizeLimit}.", 
           'emptyError'=>"{file} is empty, please select files again without it.", 
           'onLeave'=>"The files are being uploaded, if you leave now the upload will be cancelled." 
           ), 
       'showMessage'=>"js:function(message){ alert(message); }" 
       ) 

       )); 
?> 
    <?php //echo $form->textFieldControlGroup($model,'fileName',array('maxlength'=>45)); ?> 
    <?php //echo $form->textFieldControlGroup($model,'user_id'); ?> 

    <?php echo BsHtml::submitButton('Submit', array('color' => BsHtml::BUTTON_COLOR_PRIMARY)); ?> 

<?php $this->endWidget(); ?> 

這是視頻模式

<?php 

/** 
* This is the model class for table "video". 
* 
* The followings are the available columns in table 'video': 
* @property integer $id 
* @property string $video 
* @property integer $user_id 
* 
* The followings are the available model relations: 
* @property User $user 
*/ 
class Video extends CActiveRecord 
{ 
    /** 
    * Returns the static model of the specified AR class. 
    * @param string $className active record class name. 
    * @return Video the static model class 
    */ 
    public static function model($className=__CLASS__) 
    { 
     return parent::model($className); 
    } 

    /** 
    * @return string the associated database table name 
    */ 
    public function tableName() 
    { 
     return 'video'; 
    } 

    /** 
    * @return array validation rules for model attributes. 
    */ 
    public function rules() 
    { 
     // NOTE: you should only define rules for those attributes that 
     // will receive user inputs. 
     return array(
      array('video, user_id', 'required'), 
      array('user_id', 'numerical', 'integerOnly'=>true), 
      array('video', 'length', 'max'=>45), 
      // The following rule is used by search(). 
      // Please remove those attributes that should not be searched. 
      array('id, video, user_id', 'safe', 'on'=>'search'), 
     ); 
    } 

    /** 
    * @return array relational rules. 
    */ 
    public function relations() 
    { 
     // NOTE: you may need to adjust the relation name and the related 
     // class name for the relations automatically generated below. 
     return array(
      'user' => array(self::BELONGS_TO, 'User', 'user_id'), 
     ); 
    } 

    /** 
    * @return array customized attribute labels (name=>label) 
    */ 
    public function attributeLabels() 
    { 
     return array(
      'id' => 'ID', 
      'video' => 'Video', 
      'user_id' => 'User', 
     ); 
    } 

    /** 
    * Retrieves a list of models based on the current search/filter conditions. 
    * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions. 
    */ 
    public function search() 
    { 
     // Warning: Please modify the following code to remove attributes that 
     // should not be searched. 

     $criteria=new CDbCriteria; 

     $criteria->compare('id',$this->id); 
     $criteria->compare('video',$this->video,true); 
     $criteria->compare('user_id',$this->user_id); 

     return new CActiveDataProvider($this, array(
      'criteria'=>$criteria, 
     )); 
    } 
} 

這是創建視圖文件

<?php 
/* @var $this VideoController */ 
/* @var $model Video */ 
?> 

<?php 
$this->breadcrumbs=array(
    'Videos'=>array('index'), 
    'Create', 
); 

$this->menu=array(
    array('icon' => 'glyphicon glyphicon-list','label'=>'List Video', 'url'=>array('index')), 
    array('icon' => 'glyphicon glyphicon-tasks','label'=>'Manage Video', 'url'=>array('admin')), 
); 
?> 

<?php echo BsHtml::pageHeader('Create','Video') ?> 

<?php $this->renderPartial('_form', array('model'=>$model)); ?> 

這是視頻

<?php 
/* @var $this VideoController */ 
/* @var $model Video */ 
/* @var $form BSActiveForm */ 
?> 

<?php $form=$this->beginWidget('bootstrap.widgets.BsActiveForm', array(
    'id'=>'video-form', 
    // Please note: When you enable ajax validation, make sure the corresponding 
    // controller action is handling ajax validation correctly. 
    // There is a call to performAjaxValidation() commented in generated controller code. 
    // See class documentation of CActiveForm for details on this. 
    'enableAjaxValidation'=>false, 
    'htmlOptions' => array(
     'enctype' => 'multipart/form-data', 
    ), 

     )); ?> 

    <p class="help-block">Fields with <span class="required">*</span> are required.</p> 
<?php echo $form->errorSummary($model); ?> 

<?php //echo $form->errorSummary($model); ?> 

    <?php echo $form->labelEx($model,'user_id'); ?> 
    <?php 

    $this->widget('ext.select2.ESelect2',array(
    'name'=>'video[user_id]', 
    'data'=>CHtml::listData(User::model()->findAll(), 'id', 'username'), //the whole available list 
    'htmlOptions'=>array(
     'placeholder'=>' search User name?', 
    //'options'=>$options, //the selected values 
    //'multiple'=>'multiple', 
    'style'=>'width:530px', 
), 
)); 
    ?> <br><br> 
    <?php echo $form->errorSummary($model); ?> 
<?php 
$this->widget('ext.EAjaxUpload.EAjaxUpload', 
array(
     'id'=>'uploadFile', 
     'config'=>array(
       'action'=>Yii::app()->createUrl('video/upload'), 
       'allowedExtensions'=>array("mp4","3gp"),//array("jpg","jpeg","gif","exe","mov" and etc... 
       'sizeLimit'=>1000*1024*1024,// maximum file size in bytes 
       'minSizeLimit'=>1*1024, 
       'auto'=>true, 
       'multiple' => true, 
       'onComplete'=>"js:function(id, fileName, responseJSON){ alert(fileName); }", 
       'messages'=>array(
           'typeError'=>"{file} has invalid extension. Only {extensions} are allowed.", 
           'sizeError'=>"{file} is too large, maximum file size is {sizeLimit}.", 
           'minSizeError'=>"{file} is too small, minimum file size is {minSizeLimit}.", 
           'emptyError'=>"{file} is empty, please select files again without it.", 
           'onLeave'=>"The files are being uploaded, if you leave now the upload will be cancelled." 
           ), 
       'showMessage'=>"js:function(message){ alert(message); }" 
       ) 

       )); 
?> 

    <?php //echo $form->textFieldControlGroup($model,'fileName',array('maxlength'=>45)); ?> 
    <?php //echo $form->textFieldControlGroup($model,'user_id'); ?> 

    <?php echo BsHtml::submitButton('Submit', array('color' => BsHtml::BUTTON_COLOR_PRIMARY)); ?> 

<?php $this->endWidget(); ?> 
+0

嗨@Salik什麼問題?如果我明白你不能將視頻名稱保存在數據庫中?而視頻文件則保存在正確計劃的文件夾中。所以數據庫中名稱的缺乏不會讓你在視圖中看到正確的結果? – scaisEdge

+0

完全匹配,在數據庫中缺乏名稱不會讓我看到localhost/projectname/video/create上的視頻 –

+0

您確定actionCreate在您按下提交時被調用嗎? – scaisEdge

回答

0

如果不保存在數據庫中的模型,首先檢查_form.php這個文件,如果從提交的數據是你需要什麼,該模型被保存沒有模型驗證。

public function actionCreate() 
{ 
    $model=new Video; 

    // Uncomment the following line if AJAX validation is needed 
    // $this->performAjaxValidation($model); 
    if(isset($_POST){ 
     var_dump('ALL POST'); 
     var_dump($_POST); 
    } else { 
     var_dump('NO POST'); 
    } 

    if(isset($_POST['video'])) 
    { 
     var_dump('VIDEO POST'); 
     var_dump($_POST['video']); 

     $model->attributes=$_POST['video']; 
     //$model->video = Video::getInstance($model, 'video'); 
     if($model->save(false)) 
      $this->redirect(array('view','id'=>$model->id)); 
    } 

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

如果後續代碼var_dump顯示正確的值和重寫值保存在數據庫的問題是在驗證規則驗證。

,並在視圖中嘗試

<?php 

    echo "<br /> Video = : ". $model->video ."<br />"; 
?> 
+0

解釋一下。什麼顯示了var_dump($ _ POST ['video'])? – scaisEdge

+0

我嘗試了您提到的確切代碼作爲答案,但它不會帶來任何變化。它的工作方式與以前相同。 –

+0

@SalikAsad我沒有問你是否工作,但只有var_dump指令顯示在瀏覽器中。 var_dump顯示或不顯示。請清楚.. – scaisEdge