Vladimir
Ку всем
Vladimir
Есть такое правило валидации ['entity_id','validateEntity','params'=>'module'], Причем перед ним стоит правило что entity_id инт Есть правило валидации public function validateEntity($attribute, $params){ if ($params=='news'){ News::find()->where(['id' => $attribute])->exists(); } else { $this->addError($attribute, Yii::t('common','Неверный материал комментария!')); } } Не знаю что изменилось, но вроде до этого все работало ок, а теперь не срабатывает когда все правильно, причем при getErrors при распечатывании $attribute выдает строку entity_id хотя там должен сидеть инт
Vladimir
Вопрос
Vladimir
Почему он строка и почему его не отсеивает проверка на int, и может быть переменная $attribute как-то по-своему себя ведет и я не вкурсе
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
А, ну т.е. это не смущает?)
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
охо, придирки подъехали)
Косяки верстки, бывает)
Vladimir
памагите
who are you
покажи код нормально как оно там есть,ибо не оч ясно как там оно выглядит
Vladimir
Какой именно код нужен?
Vladimir
а чо так все намудрил сложно ?
Ну я вроде сюда писал уже про виджет комментов, мне нужно проверить что передаваемый в форме id материала не левый а существует
Vladimir
https://pastebin.com/cBFYhSmd экшн
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
Твой код говно.
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
В переводе с пыхи, если парамс ньюс то ... В противном случае ошибка "неверный код комментария"
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
... = void
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
При том что params доп параметры валидатора (т.е. массив как минимум)
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
в результате у тебя всегда будет ошибка
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
['news', 'exists', /* а дальше в документации найдешь */],// profit
Vladimir
exist валидатор чем не подходит?
Тем что виджет омментов юзается в разных модулях
Vladimir
у меня есть module и entity_id
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
При чем тут виджет? При чем тут модули?
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
перестань кидаться непонятными словами, у тебя есть модель в которой определена валидация.
Vladimir
А точно, я это в 2 ночи писал
Vladimir
Надо запихнуть News::find()->where(['id' => $attribute])->exists(); в иф
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
['news', 'exists', /* а дальше в документации найдешь */],// profit
👆 я понимаю, 1:44 почти как 2 ночи уже, но вникни)
Vladimir
У меня форма
Vladimir
Комментариев
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
Первая выдача в гугле по запросу "exist validator yii2"
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
https://www.yiiframework.com/doc/api/2.0/yii-validators-existvalidator
Vladimir
Мне в завизимости от модуля в котором вызывается виджет комментариев(поле moduleв модели и в форме) нужно вызывать разные AR классы (news files и тд)
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
['news', 'exist', 'targetClass' => my\best\News::class, 'targetAttribute' => 'id'],
Vladimir
Если ты мне расскажешь как изменять таргет класс по условию if внутри массива rules
Vladimir
Я тебе похлопаю
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
ну корми это в модуль из вне
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
в виджет*
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
или бери из модели
Vladimir
Думаешь это ок что я в форме, которая доступна пользователю буду писать полный путь к классу ActiveRecord?
Vladimir
С неймспейсами и тд
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
при чем тут форма? ты рендеришь виджет когда у тебя есть модель
Vladimir
Да
Vladimir
И в модели есть поле module
Vladimir
Человек заполняет форму комментария и отправляет его
Vladimir
И вместе с ним отправляется поле module со значением news
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
у тебя много аг новостей и ты обрабатываешь комментарии в одном экшне который не знает для какой новости прилетел коммент?
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
ну и все, определяй это в модели
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
модель все равно одна
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
и уже может знать что и где ей искать
Vladimir
у тебя много аг новостей и ты обрабатываешь комментарии в одном экшне который не знает для какой новости прилетел коммент?
Да, виджет комментариев не знает, в новостях он или в файлах будет или в другом модуле вызван
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
Опиши форму комментария, а в каждом модуле форму с данными модуля.
ну если у него отдельный модуль комментов, то это не поможет
Vladimir
Опиши форму комментария, а в каждом модуле форму с данными модуля.
То есть мне в каждом модуле дублировать одинаковый экшн?
Vladimir
У меня комменты добавляются через site контроллер
Vladimir
С любого модуля откуда угодно где они есть
Vladimir
Тк в виджете
Konstantin
Подскажите как получить/скачать данные из внешнего URL на стороне сервера. file_get_contents($url); норм?
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
сущность одна
Vladimir
сущность одна
Сущность чего?
Vladimir
Смотрите
SiZE
То есть мне в каждом модуле дублировать одинаковый экшн?
Ну ты можешь обернуть создание в транзакцию, кидать событие что создан комментарий и отрабатывать. Там вариантов масса
Vladimir
targetClass не фиксированный для валидатора exists
Vladimir
Поэтому я его и не юзаю
Vladimir
а пишу свой
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
targetClass не фиксированный для валидатора exists
у тебя в валидаторе он фиксированный. У тебя аттрибут "не фиксированный" как ты говоришь
Vladimir
у тебя в валидаторе он фиксированный. У тебя аттрибут "не фиксированный" как ты говоришь
У меня в валидаторе пока что один if для news, но потом будет больше
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
можно в зависимости от контекста прокидывать в модель нужный аттрибут который указывать в валидаторе
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
объект модели у тебя один
SiZE
А смысл мне дублировать один и тот же код?
Я не очень понял, что ты собрался дублировать. Но отвечу что ООП в принципе избыточен по определению
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
выкинь ифы они не нужны
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
['news', 'exist', 'targetClass' => my\best\News::class, 'targetAttribute' => $this->currentAttribute],
Vladimir
Мне нужно exist проверять не news, а entity_id
Vladimir
Грубо говоря логика такая
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
SiZE
почему?
Потому что не должно что угодно куда угодно подставляться без проблем