2012-09-28 3 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> 

Controller - Экспорт (После того, как формы с точки зрения было)

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

Так что я здесь в том, что он всегда работает на ELSE моего контроллера actionExport() Даже если я пытаюсь echo $model->validate();, не печатает ничего, поэтому его всегда обращайтесь к инструкции else.

Ваша помощь будет принята с благодарностью и, конечно же, вознаграждена!

Спасибо! :)

+0

вы можете вставить print_r из $ model-> атрибуты? – 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/

Смежные вопросы