
☕ CunningFox
24.03.2018
20:54:44
можно в зависимости от контекста прокидывать в модель нужный аттрибут который указывать в валидаторе
объект модели у тебя один

SiZE
24.03.2018
20:54:52

☕ CunningFox
24.03.2018
20:55:05
выкинь ифы они не нужны

Google

Vladimir
24.03.2018
20:55:35

☕ CunningFox
24.03.2018
20:55:36
['news', 'exist', 'targetClass' => my\best\News::class, 'targetAttribute' => $this->currentAttribute],

Vladimir
24.03.2018
20:56:02
Мне нужно exist проверять не news, а entity_id

SiZE
24.03.2018
20:56:03

Vladimir
24.03.2018
20:56:15
Грубо говоря логика такая

☕ CunningFox
24.03.2018
20:56:20

SiZE
24.03.2018
20:57:24
почему?
Потому что не должно что угодно куда угодно подставляться без проблем

☕ CunningFox
24.03.2018
20:57:28
new Model(['currentAttribute' => 'news']) и public function init() {if ($this->currentAttribute !== 'news') {throw new ...}
от того и страдания

Vladimir
24.03.2018
20:58:40
Форма комментария вызывается на странице модуля новости у материала id 2.
Потом человек отправляет комментарий , он идет AJAX-ом в контроллер site в экшн comment_add
Чтобы проверить, что человек не написал на клиенте свои значения module и entity_id в правилах валидации я:
проверяю что module IN [news,files и тд]
проверяю что у данного модуля есть такая новость, файл и тд с id=entity_id

☕ CunningFox
24.03.2018
20:59:11
извиняюсь, я невнимательно читал этот код
там PK название аттрибута. Всем доброй ночи

Google

Vladimir
24.03.2018
21:00:28
А я кажется нашел в чем баг
Вот в этом правиле
['entity_id','validateEntity','params'=>'module']
'module' не передается как атрибут а передается как строка module
вопрос тогда, как его заставить передавать значение пришедшего в форму module?

SiZE
24.03.2018
21:02:01
У каждого модуля свой add_comment и никакого говна с избытком проверок

Vladimir
24.03.2018
21:03:34
А зачем мне каждому модулю писать add_comment, если все можно через site, в чем смысл тогда использовать виджет
Это же дикая избыточность
А если переписать надо будет контроллер мне все модули переписывать?

SiZE
24.03.2018
21:04:06
Удобно же. Один файл

Vladimir
24.03.2018
21:04:41
Ну в модулях по крайней мере все разное примерно

Konstantin
24.03.2018
21:04:44

☕ CunningFox
24.03.2018
21:04:46
Есть 100500 способов не дублировать код.

Vladimir
24.03.2018
21:04:58
А он и не знает
Это дело виджета комментов, а не модуля
Вопрос

SiZE
24.03.2018
21:06:35
Ну ты продолжай изобретать)

Google

Vladimir
24.03.2018
21:06:42
Есть ли возможность в етом правиле
['entity_id','validateEntity','params'=>'module'],
Передавать module не как строку module, а как атрибут module?

SiZE
24.03.2018
21:06:56
У тебя много времени видимо)

Vladimir
24.03.2018
21:07:15
Ну ты продолжай изобретать)
Ну вообще-то в прошлый раз когда я советовался с челиками из этого чата мы пришли как раз к тому что у меня сейас

☕ CunningFox
24.03.2018
21:07:16

Vladimir
24.03.2018
21:07:42
И оно как бы нормально работает с такой логикой и нету одинакового кода
Проще исправить пару ифов в виджете чем редатировать кучу модулей

Konstantin
24.03.2018
21:08:29
Я бы компонентом сделал тогда и на событиях проверял ?

☕ CunningFox
24.03.2018
21:08:29
У тебя модель в виджете?
Что за ,.. стыд? Кто посоветовал модель в виджет пихать?

Vladimir
24.03.2018
21:09:55
Называй его компонентом
Это компонент

Konstantin
24.03.2018
21:10:09
Сайз дело говорит. Нужно айди модуля тогда писать в табу и сравнивать

Vladimir
24.03.2018
21:10:58
В каком смысле?

Konstantin
24.03.2018
21:11:02
Чтобы твои код мог из одного места проверять

Vladimir
24.03.2018
21:11:40
У меня модуль вот так проверяется ['module','in','range'=>['news','files','projects']],
нужно проверить что в этом модуле есть запись)
с id который entity_id

Konstantin
24.03.2018
21:14:17
Нуууу ) эксист вроде проверяет

Vladimir
24.03.2018
21:14:30
Ага

Google

Vladimir
24.03.2018
21:14:51
Только targetClass зависит от модуля

Konstantin
24.03.2018
21:15:13
Херово
Кажется я въехал ?
Но всё равно как-то странно ты сделал. Мне кажется что оно по другому может быть
Я вот понять не могу зачем тебе лезть в таргет класс
У тебя же контроллер один только принимает

Vladimir
24.03.2018
21:21:10
В принципе

Konstantin
24.03.2018
21:22:53
Да. Понял. Он только для ар

Vladimir
24.03.2018
21:24:35
Мой вопрос сейчас сводится к такому, есть переменные module и entity_id можно ли в rules валидации модели ['entity_id','validateEntity','params'=>'module'], вот тут, передавать module как переменную чтобы в $params оно подставило значение $module

☕ CunningFox
24.03.2018
21:25:49
да блин
даже в "этом"
!exist
не то)

Konstantin
24.03.2018
21:26:58
!exist
Он работает только с атрибутами модели Active Record

☕ CunningFox
24.03.2018
21:27:46
а должен проверять что нет сущности exists() === false

Vladimir
24.03.2018
21:29:06

Google

☕ CunningFox
24.03.2018
21:29:24

Vladimir
24.03.2018
21:29:26
То есть !(param='sss'&& exist())=>error

☕ CunningFox
24.03.2018
21:29:29
хочется так хочется)

Vladimir
24.03.2018
21:29:39

Konstantin
24.03.2018
21:29:45
в пасте пришли чо там в модели

☕ CunningFox
24.03.2018
21:30:05

Vladimir
24.03.2018
21:30:21

☕ CunningFox
24.03.2018
21:30:26
ну ок

Konstantin
24.03.2018
21:30:50
пасту давай модели, ты чо до сих пор не прислал то её

Vladimir
24.03.2018
21:31:02
ща
https://pastebin.com/7Xf6mPM4
Вот пока валидатор такой
вернее такой if (!($params=='news'&&News::find()->where(['id' => $attribute])->exists())){
$this->addError($attribute, Yii::t('common','Неверный материал комментария!'));
}

☕ CunningFox
24.03.2018
21:35:48
($this->module === 'news' && >>>!<<< News.....->exists())

Vladimir
24.03.2018
21:36:29
$this->module в правилах валидации?

☕ CunningFox
24.03.2018
21:36:57
в валидаторе

Vladimir
24.03.2018
21:37:30
В валидаторе $attribute, $params