データベースにテーブルなしでファイルアップロード検証ルールを作成したので、CFormModelを使用してそれを拡張しました。
これが私のコードです:
コントローラ
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',
);
}
}
だから私がここでしたことは、それが常に私のコントローラーのelseに実行されるということです。actionExport()
私がしようとしてもecho $model->validate();
、それは何も出力しないので、それは常にelseステートメントに行きます。
あなたの助けは大歓迎です、そしてもちろん、報われます!
ありがとう!:)