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
who are you
покажи код нормально как оно там есть,ибо не оч ясно как там оно выглядит
Vladimir
Какой именно код нужен?
Vladimir
а чо так все намудрил сложно ?
Ну я вроде сюда писал уже про виджет комментов, мне нужно проверить что передаваемый в форме id материала не левый а существует
Vladimir
https://pastebin.com/cBFYhSmd
экшн
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
В переводе с пыхи, если парамс ньюс то ... В противном случае ошибка "неверный код комментария"
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
... = void
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
При том что params доп параметры валидатора (т.е. массив как минимум)
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
в результате у тебя всегда будет ошибка
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
['news', 'exists', /* а дальше в документации найдешь */],// profit
Vladimir
у меня есть module и entity_id
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
При чем тут виджет? При чем тут модули?
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
перестань кидаться непонятными словами, у тебя есть модель в которой определена валидация.
Vladimir
А точно, я это в 2 ночи писал
Vladimir
Надо запихнуть News::find()->where(['id' => $attribute])->exists(); в иф
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
Vladimir
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
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
у тебя много аг новостей и ты обрабатываешь комментарии в одном экшне который не знает для какой новости прилетел коммент?
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
ну и все, определяй это в модели
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
модель все равно одна
SiZE
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
и уже может знать что и где ей искать
Vladimir
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
Vladimir
Vladimir
У меня комменты добавляются через site контроллер
Vladimir
С любого модуля откуда угодно где они есть
Vladimir
Тк в виджете
Konstantin
Подскажите как получить/скачать данные из внешнего URL на стороне сервера.
file_get_contents($url); норм?
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
сущность одна
Vladimir
Смотрите
Vladimir
targetClass не фиксированный для валидатора exists
Vladimir
Поэтому я его и не юзаю
Vladimir
а пишу свой
Vladimir
Vladimir
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
можно в зависимости от контекста прокидывать в модель нужный аттрибут который указывать в валидаторе
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
объект модели у тебя один
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
выкинь ифы они не нужны
Vladimir
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
['news', 'exist', 'targetClass' => my\best\News::class, 'targetAttribute' => $this->currentAttribute],
Vladimir
Мне нужно exist проверять не news, а entity_id
SiZE
Vladimir
Грубо говоря логика такая
☕️ 𝕽𝖔𝖈𝖐𝖊𝖙𝕽𝖆𝖈𝖈𝖔𝖔𝖓
SiZE
почему?
Потому что не должно что угодно куда угодно подставляться без проблем