2012-09-28 83 views
0

我創建了一個文件上傳的驗證規則,在我的數據庫中沒有表格,所以我只是使用CFormModel對其進行了擴展。Yii驗證規則不起作用

這裏是我的代碼:

控制器

public function actionMaterials($pid) 
{ 
    $projectMaterialFile = new ProjectMaterialFile; 
    $this->render('project_materials',array(
     'projectMaterialFile'=>$projectMaterialFile, 
    )); 
} 

VIEW(工程材料)

<div id="exportMaterialContent"> 
    <h4 style="text-align:left;">Export Material Document</h4> 
    <?php echo CHtml::form($this->createUrl("project/export"),'post',array('enctype'=>'multipart/form-data')); ?> 
    <?php echo CHtml::activeHiddenField($projectMaterialFile,'idProject',array('value'=>$projectModel->idProject)); ?> 
    <?php echo CHtml::activeFileField($projectMaterialFile, 'document'); ?> 
    <?php echo CHtml::submitButton("Export"); ?> 
    <?php echo CHtml::endForm(); ?> 
</div> 

控制器 - 出口(從形式來看後一直提交)

public function actionExport() 
{ 
    $model = new ProjectMaterialFile; 
    $model->attributes = $_POST['ProjectMaterialFile']; 
    if($model->validate()) { 
     $model->document = CUploadedFile::getInstance($model,'document'); 
     $model->document->saveAs(Yii::getPathOfAlias('webroot')."/material_document/".$model->document->name); 
     echo "correct"; 
    } else { 
     echo "Invalid!"; 
    } 
} 

型號

class ProjectMaterialFile extends CFormModel 
{ 
    public $document; 
    public $idProject; 

    public function rules() 
    { 
     return array(
      array('document','file','types'=>'csv'), 
      array('document', 'required'), 
     ); 
    } 

    public function attributeLabels() 
    { 
     return array(
      'document' => 'Project Material Document', 
      'idProject' => 'Project ID', 
     ); 
    } 
} 

因此,我在這裏做的是,它總是跑到我的控制器的其他actionExport() 即使我嘗試echo $model->validate();,它不顯示任何信息,這就是爲什麼它總是去else語句。

您的幫助將不勝感激,當然,獎勵!

謝謝! :)

+0

可以粘貼的print_r $的模型 - >屬性? – GBD

+0

奇怪,但這是輸出:Array([document] => [idProject] =>) – PinoyStackOverflower

回答

1

試圖改變驗證規則在你的模型如下

public function rules() 
{ 
    return array(
     array('document','file','types'=>'csv'), 
     array('document', 'required'), 
     array('document', 'length', 'max'=>200), 
     array('idProject', 'length', 'max'=>200), 
     array('document, idProject', 'safe'), 
    ); 
} 

現在改變你的控制器部分,如下

$model = new ProjectMaterialFile; 
$model->attributes = $_POST['ProjectMaterialFile']; 
$model->document = CUploadedFile::getInstance($model,'document'); 

if($model->validate()) 
{ 
    $model->document->saveAs(Yii::getPathOfAlias('webroot') 
       ."/material_document/".$model->document->name); 
    echo "Correct"; 
} 
else 
{ 
    echo "Invalid!"; 
} 

實例鏈接:http://www.yiiframework.com/wiki/2/how-to-upload-a-file-using-a-model/