Объясните валидацию file

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Объясните валидацию file

Сообщение evgeniy123 »

У меня в таблице поля для хранения имен файлов которые я загружаю. Делаю что бы файлы проверялись что это file таким способом:

Код: Выделить всё

...

     [['verso_doc'],  'file', 'extensions' => 'png, jpg', 'skipOnEmpty' => false, 'checkExtensionByMimeType'=>true,  /*'maxFiles' => 1, */ 'maxSize' => 10000000, 'on'=> 'upload_image'],
..
И так все проходит . Как только я хочу добавить в массив полей другие поля то пройдет проверка только по первому элементу указанному в массиве.

Код: Выделить всё

 
 ....
 [['verso_doc', 'recto_doc'... ],  'file ... 
 ..
 
 
Это нужно на каждое поле копировать правило одно и тоже + создавать новый сценарий , а не как с другими validators ?
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Объясните валидацию file

Сообщение andku83 »

сформулируйте нормально что вам необходимо и ваш вопрос.
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Объясните валидацию file

Сообщение evgeniy123 »

andku83 писал(а): 2018.03.21, 00:52 сформулируйте нормально что вам необходимо и ваш вопрос.
сделать загрузку файлов. Есть табличка в которой есть поля в которых я храню имена файлов. Загрузка делается на action в нем я делаю проверку на файл, которые загружаю. Только такая ситуация получается что в самой модели, в которой я делаю проверку файлов (type file), когда я пишу как написал в первом посту, проверка делается только по первому элементу массива (verso_doc). Когда делаю copy paste правила этого с одним элементом со своим сценарием, то все работает как нужно
Последний раз редактировалось evgeniy123 2018.03.21, 01:04, всего редактировалось 1 раз.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Объясните валидацию file

Сообщение andku83 »

понятнее не стало.
покажите ваш код который отвечает за эту реализацию (модель, action, view)
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Re: Объясните валидацию file

Сообщение nickdenry »

@andku83

Валидатор file у автора не срабатывает на 2 и более атрибута, через которые автор пытается загрузить различные файлы, но с одинаковым правилом валидации.
Ответственные программисты с высоким уровнем технического долга (c)
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Re: Объясните валидацию file

Сообщение nickdenry »

Судя по документации написание корректное.
http://www.yiiframework.com/doc-2.0/yii ... tes-detail

For multiple attributes, please specify them as an array; for single attribute, you may use either a string or an array.
Ответственные программисты с высоким уровнем технического долга (c)
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Объясните валидацию file

Сообщение evgeniy123 »

nickdenry писал(а): 2018.03.21, 01:09 Судя по документации написание корректное.
http://www.yiiframework.com/doc-2.0/yii ... tes-detail

For multiple attributes, please specify them as an array; for single attribute, you may use either a string or an array.
Я валидирую по одному атрибуту. Закачиваю по 1 файлу. Я не совсем понял что написано :( Могу просто присваивать единственному атрибуты в модели которая и будет проверять это файл или нет и все остальное. Но это чувствую не так делается
Последний раз редактировалось evgeniy123 2018.03.21, 01:18, всего редактировалось 1 раз.
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Re: Объясните валидацию file

Сообщение nickdenry »

Я валидирую по одному атрибуту. Закачиваю по 1 файлу
['verso_doc', 'recto_doc'... ] -

'verso_doc' и 'recto_doc' тогда что?
Ответственные программисты с высоким уровнем технического долга (c)
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Объясните валидацию file

Сообщение evgeniy123 »

nickdenry писал(а): 2018.03.21, 01:17
Я валидирую по одному атрибуту. Закачиваю по 1 файлу
['verso_doc', 'recto_doc'... ] -

'verso_doc' и 'recto_doc' тогда что?
тогда только по первому будет валидация. verso_doc
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Объясните валидацию file

Сообщение evgeniy123 »

andku83 писал(а): 2018.03.21, 01:03 понятнее не стало.
покажите ваш код который отвечает за эту реализацию (модель, action, view)
View:

Код: Выделить всё

<?= $form->field($model_registration, 'piece_verso_doc')->widget(FileUpload::classname(), [
                                                    // 'model' => $model,
                                                    //  'attribute' => 'image',
                                                    'url' => Url::to(['/driver/identity-verso-doc']), // your url, this is just for demo purposes,
                                                    'options' => [
                                                    'accept' => 'image/*'],
                                                    'clientOptions' => [
                                                        'singleFileUploads' => true,
                                                        'limitMultiFileUploads' => 1,
                                                        'maxFileSize' => 1000000
                                                    ],
                                                    // Also, you can specify jQuery-File-Upload events
                                                    // see: https://github.com/blueimp/jQuery-File-Upload/wiki/Options#processing-callback-options
                                                    'clientEvents' => [
                                                        'fileuploadprogressall' => 'function(e, data) { }',
                                                    ],
                                                ])->label(false);
                                                ?>
                                                
Controller:

Код: Выделить всё

public function actionIdentityVersoDoc(){  // Passport resto

        $model = new RegistrationDriver();

        if(Yii::$app->request->isPost){

            $model->piece_verso_doc = UploadedFile::getInstance($model, 'piece_verso_doc');

            $model->scenario = 'upload_image';
            $model->document_upload = 'piece_verso';  // zadaem logiku v kakoi papke sozdavat

            $model->name_field = 'piece_verso_doc';   // Peredaem imya polya chto bi mojno bilo znat kakaya kartinka zakachivatysa budet
            if($model->upload()){
                Yii::$app->response->format = Response::FORMAT_JSON;
                $row_for_user =  RegistrationDriver::find()->where(['user_id'=>Yii::$app->user->id])->limit(1)->one();
                $model->scenario = 'save_as_string';
                $row_for_user->piece_verso_doc = $model->image_name_full;
                $row_for_user->upload_image_count = $row_for_user->upload_image_count +1; // uvelichivaem schetchik pro udachnoi zagruzki kartinki
                if(!$row_for_user->save()){

                    $error_first = array_values($row_for_user->getFirstErrors());
                    Yii::warning(serialize($error_first));
                    return ["error" => $error_first] ;
                };
                Yii::warning('vse ok');

                $result = [
                    'message'=> Yii::t('users', 'IMAGE_UPLOADED_S'),
                    'files' => [
                        [
                            'name' => $model->image_name_full,
                            'size' => '',
                            // 'url' => '/uploads_registration_driver/' . $model->document_upload.'/' .   $model->image_name_full,
                            'url' => '<img class="preview_my_image" src="/uploads_registration_driver/' . $model->document_upload.'/' . $model->image_name_full.'">',
                            'delete_btn' => "<a data-url='piece_verso' href='#' class='btn btn-xs btn-danger delete_btn_doc'><i class='fa fa-trash-o'></i> ".Yii::t('users', 'DELETE')."</a>",
                        ]
                    ]
                ];
                return $result;
            }
            else {

                $error_arr = [];
                foreach ($model->getErrors() as $error=>$value){
                    array_push($error_arr, $value);
                }

                return '{"error": "'.$error_arr[0][0].'"}';
            }
        }
        else {
            Yii::warning(serialize($model->getErrors()));
        }
    }
    
Model:
....
[['piece_recto_doc', 'piece_verso_doc'], 'string', 'max'=>50, 'on'=> 'save_as_string'],


[['piece_verso_doc'], 'file', 'extensions' => 'png, jpg', 'skipOnEmpty' => false, 'checkExtensionByMimeType'=>true, /*'maxFiles' => 1, */ 'maxSize' => 10000000, 'on'=> 'upload_image'],
....
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Объясните валидацию file

Сообщение andku83 »

RegistrationDriver - сначала создаем новый объект им загружаем файл, а затем делать поиск существующего и в него сохранять изменения о новом файле - зачем?
Оригинально использовать 2 сценария для $model, при чем по факту зачем было переключать на второй сценарий даже не понятно.
Из приведенного кода непонятно какой именно виджет используется для загрузки.
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Объясните валидацию file

Сообщение evgeniy123 »

andku83 писал(а): 2018.03.21, 02:57 RegistrationDriver - сначала создаем новый объект им загружаем файл, а затем делать поиск существующего и в него сохранять изменения о новом файле - зачем?
Оригинально использовать 2 сценария для $model, при чем по факту зачем было переключать на второй сценарий даже не понятно.
Из приведенного кода непонятно какой именно виджет используется для загрузки.
Для того что бы по одному - валидация по file, а вторая по string при сохранении имени файла. Widget - https://github.com/2amigos/yii2-file-upload-widget

Код: Выделить всё

RegistrationDriver - сначала создаем новый объект им загружаем файл, 
Сама row с другими данными уже созданана этапе ранее и поэтому я ищу, а не создаю новую
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Объясните валидацию file

Сообщение andku83 »

evgeniy123 писал(а): 2018.03.21, 03:09 Сама row с другими данными уже созданана этапе ранее и поэтому я ищу, а не создаю новую
но меняете же вы ту которая уже содержит данные?!
evgeniy123 писал(а): 2018.03.21, 03:09 Для того что бы по одному - валидация по file, а вторая по string при сохранении имени файла. Widget - https://github.com/2amigos/yii2-file-upload-widget
Сама row с другими данными уже созданана этапе ранее и поэтому я ищу, а не создаю новую
по вашей ссылке уже есть готовые примеры, попробуйте использовать их а не городить "черт знает что".
Закрыто