Данные не проходят валидацию.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Kazzi
Сообщения: 63
Зарегистрирован: 2020.05.05, 19:23

Данные не проходят валидацию.

Сообщение Kazzi »

Всем добра!

В общем ситуация такая. Пытаюсь вновь оформить загрузку нескольких фалов на сервер, и записать их имена в БД.
Но они не проходят валидацию( Подскажите пожалуйста, как сделать это, используя одну модель. Или хотя бы одну форму. Потому как это очень важный момент. Это загрузка изображений от пользователя плюс кое какие данные заказа. Все должно бытьв одной форме. и естественно выгружаться в одну таблицу в БД.

Вот акшон:

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

public function actionCommissions()
    {
        $base_price = CastomPrices::find()->where(['kind' => '0'])->all();
        $extra_cost = CastomPrices::find()->where(['kind' => '1'])->all();
        $shipping = CastomPrices::find()->where(['kind' => '2'])->all();
        $castomorders = CastomOrders::find()->orderBy(['`id`' => SORT_DESC])->limit(5)->asArray()->all();
        $model = new CastomOrders();
        if ($model->load(Yii::$app->request->post())) {
            $model->user_id = Yii::$app->user->getId();
            $files = UploadedFile::getInstances($model, 'referens');
            $model->referens = $model->uploadRef($files);
            $model->save();
        }
        return $this->render('commissions', compact('model', 'castomorders', 'base_price', 'extra_cost', 'shipping'));
    }  
Вот модель:

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

<?php
namespace app\models;

use yii\db\ActiveRecord;
use yii\behaviors\TimestampBehavior;
use yii\db\Expression;
use Yii;

/**
 * This is the model class for table "castom_orders".
 *
 * @property int $id
 * @property int $user_id
 * @property string $name
 * @property string $description
 * @property string $referens
 * @property int $status
 * @property int $progress
 * @property string $user_name
 * @property string $address
 */
class CastomOrders extends ActiveRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'castom_orders';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['description', 'user_name', 'user_email'], 'required'],
            [['user_id', 'status', 'price', 'progress'], 'integer'],
            [['description'], 'string'],
            [['user_email'], 'email'],
            [['referens'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg', 'maxFiles' => 5],
            [['user_name', 'track_num'], 'string', 'max' => 255],
            [['created_at', 'updated_at'], 'safe'],
        ];
    }

    public function behaviors() {
        return [
            [
                'class' => TimestampBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
                    ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
                ],
                // если вместо метки времени UNIX используется datetime:
                'value' => new Expression('NOW()'),
            ],
        ];
    }
    
    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'description' => 'Description',
            'referens' => 'Figure reference',
            'user_name' => 'Your full name',
            'user_email' => 'Your address email'
        ];
    }
    
    public function uploadRef($files)
    {
        $fileName_arr = array();
        
        foreach ($files as $file) //Прогоняем через форич каждый элемент массива с картинками.
        {
            $fileName = strtolower(md5(uniqid($file->baseName))) . '.' . $file->extension; //Создаем уникальное имя для картинки
            $file->saveAs($this->getFolder() . $fileName); //Сохраняем файл на сервер.
            $fileName_arr[] = $fileName; //Добваляем новое имя файла в массив с именами файлов
        }
        
        $fileName_str = implode(',', $fileName_arr); //Превращаем массив с именами файлов в стрку.
        
        return $fileName_str; //Возвращаем строку с именами файлов.
        
    }
    
    public function deleteCurentImages($curImages) {
        foreach ($curImages as $img)//удаляем существующие картинки
        {
            if(file_exists($this->getFolder() . $img))//Проверка на существование файлов
            {
                unlink($this->getFolder() . $img);//Удаляем файлы
            }
        }
    }
    
    private function getFolder()
    {
        return Yii::getAlias('@web') . 'img/castom_order_ref/';
    }
}
Аватара пользователя
Kazzi
Сообщения: 63
Зарегистрирован: 2020.05.05, 19:23

Re: Данные не проходят валидацию.

Сообщение Kazzi »

Если убираю валидацию поля в модели, то все работает. Но тут работа с клиентом, потому валидация необходима(
Аватара пользователя
Kazzi
Сообщения: 63
Зарегистрирован: 2020.05.05, 19:23

Re: Данные не проходят валидацию.

Сообщение Kazzi »

Удалось решить это лишь выставив 'skipOnEmpty' в true. Но... Было бы не плохо вернуть этот момент.
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Данные не проходят валидацию.

Сообщение Drugpunker »

Each разве не подходит?
Ответить