Уже голову сломал. Есть AR, в нем есть атрибут file(file Inut) и есть img, с помощью поведения в img сохраняется строка пути к загруженному файлу, а сам file никуда не загружается, но в правилах валидации он отмечен как required.
И теперь ситуация: если файл в форме не прикрепляю, то выдает ошибку как и надо, НО если прикрепляю и отправляю, происходит загрузка открывается эта же страница, но с ошибкой, что файла нет. Не понятно почему так. Пробовал делать эту опрацию без поведений, переопределив метод save() так было все ок.
Благодарю за помощь.
PS: Причем поведение реагирует на событие. Пробовал ставить событие EVENT_AFTER_VALIDATE - та же штука.
Проблема валилации при использовании поведений
Re: Проблема валилации при использовании поведений
Проблема в 13 строке.
Re: Проблема валилации при использовании поведений
Модель
Поведение
Код: Выделить всё
class Category extends ActiveRecord
{
public $file;
/**
* @inheritdoc
*/
public static function tableName()
{
return 'category';
}
public function behaviors()
{
return [
[
'class' => UploadFileBehavior::className(),
'attributes' => [
self::EVENT_AFTER_VALIDATE => ['img'],
],
],
[
'class' => TimestampBehavior::className(),
'attributes' => [
self::EVENT_BEFORE_INSERT => ['up_date'],
self::EVENT_BEFORE_UPDATE => ['up_date'],
],
]
];
}
/**
* @inheritdoc
*/
public function rules()
{
return [
['file', 'required'],
[['name', 'slug'], 'required'],
['description', 'string'],
['short_description', 'string', 'max' => 500],
[['name', 'slug'], 'string', 'max' => 255],
[['slug'], 'unique'],
['file', 'file', 'extensions' => ['jpg', 'png', 'gif'], 'maxSize' => 1024 * 1024 * 5]
];
}
}
Код: Выделить всё
class UploadFileBehavior extends AttributeBehavior
{
public function getValue($event)
{
if ($file = UploadedFile::getInstance($this->owner, 'file')){
$fileName = FileHelper::getRandomPath($file);
if ($file->saveAs(Yii::getAlias('@uploadroot') . $fileName)) {
return Yii::getAlias('@uploadweb') . $fileName;
}
}
return $this->owner->img;
}
}
Re: Проблема валилации при использовании поведений
EVENT_BEFORE_VALIDATE
Re: Проблема валилации при использовании поведений
Никто не сталкивался с такой проблемой?
Re: Проблема валилации при использовании поведений
В BEFORE_VALIDATE нужно UploadedFile::getInstance($this->owner, 'file') в $this->owner->file присвоить если файл загружен чтобы валидаторы сработали.