Php 有条件地验证文件上载

Php 有条件地验证文件上载,php,yii,Php,Yii,我有一个数据库表来管理我的文件上传。 该表描述了必须以表单形式上载的文件。因此,基本上,它包含一些字段,用于向用户描述他必须上传的一个或多个文件。 表中的重要字段包括:文件说明、一个必填字段,用于告诉我在允许表单提交之前是否需要该文件,以及一个最大字段,用于限制要上载的相同类型文件的数量。 我想在所需列值为true时触发验证规则 class Plan extends CActiveRecord{ public $Letter, $Copy, $Chamber, $License, $Ce

我有一个数据库表来管理我的文件上传。 该表描述了必须以表单形式上载的文件。因此,基本上,它包含一些字段,用于向用户描述他必须上传的一个或多个文件。 表中的重要字段包括:文件说明、一个必填字段,用于告诉我在允许表单提交之前是否需要该文件,以及一个最大字段,用于限制要上载的相同类型文件的数量。 我想在所需列值为true时触发验证规则

class Plan extends CActiveRecord{
    public $Letter, $Copy, $Chamber, $License, $Certificate, $Plans;
    public function rules(){
        return array(
            array( 'id_user, id_type, id_rental, id_city, PropiedadT, date', 'required', 'on' => 'final' ),
            array( 'Letter, Copy, License, Certificate, Chamber, Plans', 'fileExist', 'file','types' => 'jpg,JPG,pdf,doc,docx', 'allowEmpty' => false, 'wrongType'=>'Invalid file', 'on' => 'final', 'message' => 'You must attach a file') );
    }

    public function fileExist($attribute, $params){
        if( !empty( $this->{$attribute} ) ){
            $record = file_exists( "/opt/lampp/htdocs" . Yii::app()->baseUrl . "/files/Plan/" . $this->{$attribute} );
            if( !$record ){
                $this->addError( $attribute, 'You must attach a file' . $this->{$attribute} );
            }
        }
        else{
            $this->addError( $attribute, 'You must attach a file' );
        }
    }
}
我只是想知道我可以把规则放在哪里,怎么放

基本上,我有一个表格,用户需要填写一个许可证“X”。每个许可证都有不同的类型,根据该类型,用户需要附加不同的文件。用户需要附加的文件存储在文档表中。此表描述了该文件,并将其标记为必需或非必需。 每个许可证可以有不同数量的文件,甚至根本没有文件。这些文件可能是必需的,也可能不是。
我的问题旨在为该场景创建一个验证规则

首先在模型类中声明文件上载字段的规则

public function rules()
{
        return array(
            array('image','required','on'=>'final'),
            array('image', 'file', 'types'=>'jpg, gif, png'),
        );
}
现在在控制器操作中,添加以下行

$model=new Item;
if(isset($_POST['Item']))
{
    $model->attributes=$_POST['Item'];
    $model->image=CUploadedFile::getInstance($model,'image');
    if($model->save())
    {
        $model->image->saveAs('path/to/localFile');
        // redirect to success page
    }
}
确保在表单中添加enctype
'htmlOptions'=>数组('enctype'=>“多部分/表单数据”)

有关详细信息,请点击链接

我很感激你的回答,你能给我解释一下这句话吗:
数组('image','required'=>'on'=>'final'),
我发现
'required'=>'on'=>'final'
。是
必需的
,字段的名称,还是我应该在标记中添加必需的。我真的不明白这个值是如何从数据库字段中获取的。这里,“image”是您需要的字段的名称。你必须把这个放在你的模型课上。也许我不清楚。我的问题是,我希望动态创建表单。在图像表中有一个名为
required
的字段。如果该字段设置为
true
,则该字段必须为必填字段,否则将不为空。我想创建一个将此字段考虑在内的规则。请共享表结构好吗?我将检查并更新。好的,我用数据库的基本图表更新了问题。你能检查一下,让我知道这是否包含足够的信息来解决问题吗?谢谢