Как задать правила проверки в Yii для загрузки всех файлов, кроме (.php, aspx, .cs и т. Д.)

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

Как можно ограничить загрузку этих файлов,

0

Решение

добавьте пользовательское правило, подобное этому:

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

хитрость здесь в том, чтобы найти точный параметр массива Files, который вы хотите использовать для проверки типа, следуя спецификациям php zend сертификации, недостаточно для использования Files, потому что он может быть изменен пользователем, так что это первая проверка … если он пройдет, то вам следует проверить загруженный временный файл, чтобы убедиться, что это тот тип, который вы поддерживаете, но я думаю, что это хорошее начало.

Например, я сделал тест и возвращает массив $ _files:

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
)
)
)

пожалуйста, прочитайте: как работает $ files

Вы можете использовать этот пример, чтобы создать свой собственный валидатор для проверки временного файла
Пожалуйста, добавьте ваши комментарии …

0

Другие решения

Я сделал кодирование, что я хочу:

Добавлено пользовательское правило, подобное этому

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

Пожалуйста, прокомментируйте, если что-то не так, но это работает нормально.

0

По вопросам рекламы [email protected]