Php 我无法验证文件输入

Php 我无法验证文件输入,php,forms,validation,file-upload,yii,Php,Forms,Validation,File Upload,Yii,我目前正在用PHPYII框架做一个项目。我有一个表单,要求用户上传一个文件。在注册过程中,用户上传了文件,但是,当用户提交表单时,在文件输入上总是检测到表单为空,就像表单上没有附件一样。代码如下: 型号-候选人简历: return array( array('resume_file','file','types'=>'doc,docx,pdf', 'allowEmpty'=>true, 'safe'=>true, 'on'=>'regis

我目前正在用PHPYII框架做一个项目。我有一个表单,要求用户上传一个文件。在注册过程中,用户上传了文件,但是,当用户提交表单时,在文件输入上总是检测到表单为空,就像表单上没有附件一样。代码如下:

型号-候选人简历:

return array(           
      array('resume_file','file','types'=>'doc,docx,pdf', 'allowEmpty'=>true, 'safe'=>true, 'on'=>'register'),
); 
模特-候选人:

return array(
      array('can_email,name,repeat_can_email, can_password,repeat_can_password','required', 'on'=>'simplereg'),
);
public function actionCreate()
{
    $model = new Candidate();
    $model->setScenario('simplereg');
    $resume = new CandidateResume();
    $resume->setScenario('register');   

    // Uncomment the following line if AJAX validation is needed
    //$this->performAjaxValidation($model);

    if(isset($_POST['Candidate'], $_POST['CandidateResume']))
    {
        $_POST['CandidateResume']['resume_file'] = $resume->resume_file;
        $model->attributes = $_POST['Candidate'];
        $resume->attributes = $_POST['CandidateResume'];

        $uploadedFile = CUploadedFile::getInstance($resume,'resume_file');          

        if($resume->validate() && $model->validate()) 
        {
            $model->save();

            if(!empty($uploadedFile))  // check if uploaded file is set or not
            {
                $saved = $uploadedFile->saveAs(Yii::app()->params['RESUME_PATH'].$model->can_id.'_'.$uploadedFile->getName());
                $resume->resume_file = Yii::app()->params['RESUME_DIR'].$model->can_id.'_'.$uploadedFile->getName();
                $resume->resume_send_ip = Yii::app()->request->userHostAddress;
            }
            $resume->save();

        }
    }

    $this->render('create',array('model'=>$model, 'resume'=>$resume));
}
视图:

财务总监-候选人:

return array(
      array('can_email,name,repeat_can_email, can_password,repeat_can_password','required', 'on'=>'simplereg'),
);
public function actionCreate()
{
    $model = new Candidate();
    $model->setScenario('simplereg');
    $resume = new CandidateResume();
    $resume->setScenario('register');   

    // Uncomment the following line if AJAX validation is needed
    //$this->performAjaxValidation($model);

    if(isset($_POST['Candidate'], $_POST['CandidateResume']))
    {
        $_POST['CandidateResume']['resume_file'] = $resume->resume_file;
        $model->attributes = $_POST['Candidate'];
        $resume->attributes = $_POST['CandidateResume'];

        $uploadedFile = CUploadedFile::getInstance($resume,'resume_file');          

        if($resume->validate() && $model->validate()) 
        {
            $model->save();

            if(!empty($uploadedFile))  // check if uploaded file is set or not
            {
                $saved = $uploadedFile->saveAs(Yii::app()->params['RESUME_PATH'].$model->can_id.'_'.$uploadedFile->getName());
                $resume->resume_file = Yii::app()->params['RESUME_DIR'].$model->can_id.'_'.$uploadedFile->getName();
                $resume->resume_send_ip = Yii::app()->request->userHostAddress;
            }
            $resume->save();

        }
    }

    $this->render('create',array('model'=>$model, 'resume'=>$resume));
}
如果我删除控制器上的验证:

if($resume->validate() && $model->validate()) 
可以保存表单数据,并将附件正确放置在文件夹中。但是,我需要对表单进行验证。所以我不能跳过这部分


有什么我遗漏的吗?我已经检查了很多次,并为解决方案做了研究。所有这些都提供了类似的解决方案,因此我无法解决问题。有人能帮我吗?提前谢谢。

您没有设置
恢复\u文件
属性。它来自
$\u文件
而不是
$\u帖子

$resume->attributes = $_POST['CandidateResume'];
$uploadedFile = CUploadedFile::getInstance($resume,'resume_file');   
$resume->resume_file = $uploadedFile; //add this line

我应该在哪里添加行?验证之前或之后?
validate()之前
初始化
$uploadedFile之后的方法
谢谢!它起作用了!!我与这个错误斗争了这么久,却找不到答案,结果就是因为那条线。我能知道为什么我们需要在确认前完成任务吗?我认为它应该能够自己检测不要设置
resume\u文件
属性。转换为超全局数组
$\u文件
不在
$\u GET
$\u POST
etcI意识到另一件事是,如果我使用:$model->save(),表单数据保存在数据库中;我需要在括号内加上false。为什么?有区别吗?