Ilya 🃏
И, между прочим, этот раздел вообще не содержит никакой, по сути, информации. Кроме примера кода и объяснения того, как работают промежуточные таблицы, а не объяснения, как работают данные методы.
Borisov
английская дока намного информативнее
Antony
Я в основном на английской сижу, но некоторые непонятные моменты подглядеть в русской неплохо тоже.
Antony
Кстати где найти все допустимые параметры валидации в rules? Ибо в доках не могу найти тот же when , range
Toly
Я обычно заглядываю в yii\validators\Validator
Toly
Там вполне ясно всё описано
Тёмыч
https://nix-tips.ru/yii2-api-guides/guide-ru-tutorial-core-validators.html
Тёмыч
Или в класс нужного валидатора смотреть в его публичные св-ва
Antony
Да, все нашел в публичных свойствах.
Antony
Еще небольшое уточнение, если я задаю в scenarios нужные поля для сценариев, то в rules все равно нужно прописывать 'on' => 'scenario' или будут применятся только поля, указанные в сценарии? В зависимости поведения как добавить поля во все сценарии? Получается либо нужно дублировать поля в scenarios либо задавать сценарии ко всем полям?
Toly
scenarios можно не переопределять: * The default implementation of this method will return all scenarios found in the [[rules()]] * declaration. A special scenario named [[SCENARIO_DEFAULT]] will contain all attributes * found in the [[rules()]]. Each scenario will be associated with the attributes that * are being validated by the validation rules that apply to the scenario.
Antony
Т.е. я правильно понимаю что без указания сценария в rules будет применятся в любом случае? Тогда не понятно зачем вообще переопределять scenarios.
Toly
Да, правильно. Здесь есть 2 варианта решения. Иногда форма имеет настольно много полей / сценарием, что наглядней будет записать их в другом виде - переопределить scenarios и убрать on из rules. Гибко, но не с первого раза въезжаешь
Antony
Т.е. scenarios я должен указать только уникальые поля для этого сценария, для других сценариев в этом случае оно не будет применятся, а поля которые не заданы в scenarios будут выполнятся в любом случае (как SCENARIO_DEFAULT)? На примере public function scenarios() { return [ self::SCENARIO_GUEST => ['email','username'], self::SCENARIO_AUTH => ['user_id'], ]; } public function rules() { return [ [ ['message','email','username'], 'required'], [ ['message','email','username'], 'string'], [ ['user_id'], 'integer'] ]; } Я все верно понял?
Toly
В данном случае - да
Toly
Ой, стоп
Toly
Поля, которых нет в scenarios будут unsafe
Toly
То есть ты либо указываешь 'on' у валидатора, либо пишешь метод scenarios и указываешь в каких сценариях какие поля являются safe
Toly
Надеюсь, понятно объяснил
Antony
Т.е. поля по умолчанию которые должны выполнятся во всех сценариях я могу либо дублировать в scenarios, либо в rules пишу on все сценарии?
Toly
Да, так
Antony
Окей, спасибо разобрался) Было бы неплохо вместе с системным сценарием SCENARIO_DEFAULT тогда иметь еще SCENARIO_ALL тогда) Но в принципе можно в rules поместить в переменную все доступные сценарии.
Toly
Можно унаследовать результат родительского scenarios, тогда default будет работать
Antony
мерджить с parent::scenarios()?
Toly
Ага
Antony
и еще вопрос: если у меня есть ссылка на другую таблицу (к примеру email_id), но в форме нужно передать сам email, я планирую при beforeSave выдернуть или добавить email в другую таблицу, вернуть id в модель. Это нормально или можно как-то лучше реализовать? Таблица с емейлами выглядит примерно так: id | email Нужно, ибо в проекте много где емейлы используются, поэтому было решено вынести в отдельную таблицу.
s
всем привет, есть вопрос, у меня есть метод, который вызывается в лейауте, чтобы проверить добывает ли сейчас перс ресурсы. Если добывает, значит $stay_time > 0 и срабатывает if. так вот потом, когда срабатывает else, получается что он срабатывать начинает постоянно и постоянно записывает в ресурсы данные. Как сделать чтобы else сработал например только 1 раз?
s
короче с каждым обновлением страницы у меня пишет "Вы закончили работать и получили ...." =)
Ilya 🃏
Никто не сталкивался, как получить дату ближайшего вторника? Или даты трех ближайших вторников?
Ilya 🃏
Можно такое реализовать без мудохонья с написанием самописных модулей?
Ilya 🃏
в strtotime вроде только ближайший вторник можно получить, а вот второй ближайший вторник, вроде как нельзя
SiZE
Или в рнр?
Borisov
А второй ближайший вторник прибавь к первому интервал неделя или семь дней
Ilya 🃏
Thanks
Ilya 🃏
Фак, спасибо
Ilya 🃏
))
Ilya 🃏
Уже решил проблему)
Ilya 🃏
Этим же способом)
Ilya 🃏
Хотя не совсем, с помощью strtotime
Ilya 🃏
Удобная вещь оказалась)
s
Токен записать
Спасибо, погуглю)
s
то есть токен хранить в бд?
SiZE
Можно и в сессии и чистить если действие выполнено
Dmitry
Привет!
Dmitry
а может кто-то подсказать по доктрин мигрейшнс?
Dmitry
Дано: symfony и doctrine migrations Проблема: миграции бд бывают тяжелыми и бывает, что код уже выкатился, а миграция ещё не накатилась, в результате чего код работает с ошибками. Теоретически надо заставить код при деплое уметь работать с бд до миграции и после - с двумя версиями схемы бд. Надо: понять тру-вей с т.з. symfony и doctrine migrations для реализации такого решения проблемы. Или возможно есть иные подходы "к снаряду".
s
а в сессии можно подменить же? сделал через бд
Ilya 🃏
Никто не подскажет, как получить данные зависимости? Если по -> отдает только аттрибут этого объекта.
Ilya 🃏
Хотя в оф документации сказано, что по ->name должен отдавать зависимость
Dmitry
Надо связь чтобы была
Dmitry
getProduct
Dmitry
Item->product
Dmitry
Если ты про это
Dmitry
В доках есть примеры
Ilya 🃏
Так связь есть, в print_r показывает все, что я указал в ->with()->, но при попытке обращения к нужному аттрибуту я получаю лишь index зависимости, а не саму зависимость
Ilya 🃏
А если использовать asArray, то все работает
Йцукенг
Илья, покажите код )
Ilya 🃏
А мне нужно не превращая объект в массив получить зависимости
Ilya 🃏
https://jsfiddle.net/zznda0xx/
Ilya 🃏
Или выход - только использовать toArray?
Йцукенг
а getCourse() как выглядит?
Ilya 🃏
public function getCourse() { return $this->hasOne(Courses::className(), ['index' => 'course']); }
Ilya 🃏
Так в asArray он все выводит как надо, показывает содержимое курса, а не индекс
Йцукенг
у вас поле с id связи тоже называется course?
Ilya 🃏
Да
Йцукенг
измените название связи
Йцукенг
и обращайтесь к ней по этому новому имени
Йцукенг
не надо их одинаково называть
Ilya 🃏
Так, вроде, удобнее)
Ilya 🃏
Пока не работаешь, как с объектом
Ilya 🃏
эх
Ilya 🃏
Понял, спасибо)
Йцукенг
Обычно поле называется с суффиксом Id - courseId
Йцукенг
а связь уже course
Ilya 🃏
В начале так и делал, но потом все переписал без суффиксов) Показалось, что так будет удобнее работать
Ilya 🃏
Да и в принципе удобнее, пока не сталкиваешься с объектами