如何在 Yii 中给出验证规则以上传除 (.php、aspx、.cs 等) 之外的所有文件

How to give validation rules in Yii to upload all file other then (.php, aspx, .cs etc)

return array(
  array('speech', 'required'),
  array('speech,document,speech_on,created_on, updated_on,inactive','safe')
  array('document','file','restrict','types'=>'.php,.aspx,.cs', 'maxSize'=>1024*1024*2,'tooLarge'=>'Size should be less then 2MB','on'=>'upload'),      
);

如何限制这些文件上传,

添加这样的自定义规则:

array('document', 'docTypeRuleValidator'),

然后在 components/validators 中创建自定义验证规则,名称 docTypeRuleValidator 为:

class DocTypeRuleValidator extends CValidator
{
    public function validateAttribute($model, $attribute)
    {
        yii::trace($attribute, __METHOD__);
        yii::trace(CVarDumper::dumpAsString($_FILES), __METHOD__);

        if(in_array($_FILES['ModHwTM']['type']['imageUploaded'], array('image/jpg')))
        {
            $this->addError($model, $attribute, 'Not appropiate type!');
        }
    }
}

这里的技巧是找到要用于验证类型的文件数组的确切参数,遵循 phpzend 认证规范不足以使用文件,因为它可能被用户操纵所以这是第一次验证......如果它通过那么你应该检查你上传的临时文件以确保它是你支持的类型,但我认为这是一个很好的开始。

例如,我对 $_files 数组进行了测试 returns:

array
(
        'ModHwTM' => array
        (
                'name' => array
                (
                        'imageUploaded' => 'crude_widnows.jpg'
                )
                'type' => array
                (
                        'imageUploaded' => 'image/jpeg'
                )
                'tmp_name' => array
                (
                        'imageUploaded' => '/tmp/phpcYm2Vo'
                )
                'error' => array
                (
                        'imageUploaded' => 0
                )
                'size' => array
                (
                        'imageUploaded' => 6527
                )
        )
)

请阅读:how $files works

您可以使用此示例创建您自己的自定义验证器来检查临时文件 请添加您的评论...

我做了编码,我想要什么:

添加了这样的自定义规则

array('document_path', 'docTypeRule','param'=>array('file'=>$documentName,'restrict'=>array('cs','php','aspx'))),


public function docTypeRule($attribute,$params)
{
    $extn = strtolower(pathinfo($params['param']['file'], PATHINFO_EXTENSION));
    //Put
    if(in_array($extn, $params['param']['restrict'])){
      $this->addError($attribute, 'Invalid file type, .'.$extn.' file not allowed!');
    }
}

如果有任何问题请评论,但这工作正常。