Vladislav
- WebDriver: url: http://127.0.0.1:8080/ browser: firefox
Vladislav
djn aвот это не поможет?
Vladislav
http://codeception.com/for/yii
Pavel
http://bit.ly/2tTmREd
Konstantin
это уже не функциональное тестирование)
Konstantin
- WebDriver: url: http://127.0.0.1:8080/ browser: firefox
mr.
чтобы фильтры не были мусором в основной модельке
Стопэ, вопрос был не зачем, а почему так. На обеде подумал, и понял, что во всём виноват ~навальный~ AR паттерн, а точнее то что в Yii2 он ещё расширен от Model, которая позволяет модельку пихать в формы и *СРАЗУ* всё делать. Т.е. в "нормальных" ситуациях должна быть AR, *Form модели и *Search модели, но тут всплывает второй косяк, правила валидации придётся копировать...
Vladislav
правила валидации можно в трейт
Vladislav
а не
Vladislav
зачем трейт
Vladislav
можно же просто наследовать
Vladislav
AR, *Form, *Search, *Validation
Yura
)
Vladislav
и все наследуются от валидатиона
Vladislav
но если нужно свое наследование от моедльки какой-то
Vladislav
то в трейт
Nikita
Подскажите почему при удалении составного ключа $delete = CatalogObjectsProperties::find() ->where(['properties_id' => $ar_d]) ->andWhere(['catalog_objects_id' => $this->id])->one(); if ($delete) { $delete->delete(); } ошибка: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `` IN (17, 5)' at line 1 The SQL being executed was: SELECT id WHERE `` IN (17, 5) почему он пишет SELECT id WHERE `` IN (17, 5) в таблице только catalog_objects_id и properties_id
mr.
AR, *Form, *Search, *Validation
Хм, а это тема. Только наверное не наследоваться лучше... Напихать статики туда, типа getModelSearchRules() но тоже костыльно всё, хотя удобнее уже.
Vladislav
трейты же говорю
Vladislav
сила в трейтах
Vladislav
UserValidationTrait
Vladislav
с одним методом rules
Vladislav
и его везде суешь
mr.
и его везде суешь
и что в этот рулесе? типа проверка, если вызов из класса А то return $rulesForA?
mr.
Чтобы не повторять все правила. Сомнительное решение, но ведь работает!
Нет предела совершенству, поэтому и поднял тему, может у кого есть практики как делать чтобы не только работало, но и поддерживалось без боли.
mr.
МБ потом Gii template сделать и вообще по красоте.
Konstantin
ну унаследуй ExampleSearch от Model, а не от Example
Konstantin
оно может и к лучшему - тебе ж не по всем полям искать, а только по некоторым
Konstantin
плюс может еще поиск по всяким связанным полям
Konstantin
свои шаблоны для gii - это хорошо
Konstantin
я себе запилил crud без view
Konstantin
(с совмещенным view/update)
mr.
плюс может еще поиск по всяким связанным полям
Вот-вот, я о том же, что часто на сложной форме все эти дефолтные тупо не нужны, ну а если форма поиска не сложная, то вообще генерить Search смысла мало имеет.
mr.
я себе запилил crud без view
тоже мало понимаю зачем view в CRUD для админки, куда полезнее сделать frontendUrlManager и давать ссылку сразу на материал... А как ты view/update совместил, скинь плиз скрины в лс)
Konstantin
та какие скрины
Konstantin
просто форма на обновление используется в качестве view
Konstantin
надо отредактировать - поправил поля и сохранил
Konstantin
не надо - почитал поля
mr.
Т.е. это дефолтный апдейт?
Konstantin
это непозволительное вольнодумство
Konstantin
от рук отбился
Konstantin
ой
Konstantin
не туда написал :)
Konstantin
да, дефолтный апдейт
mr.
mr.
для каждой связки AR, Form, Search свой ValidationTrait
Ну так rules для AR, Search и Form отличаются, что ты там в валидаторе пишешь?
Vladislav
вопрос был в том, что правила валидации будут дублироваться
Vladislav
общий трейт позволит убрать дублирование
Vladislav
если нужны дополнительные кастомные правила для компонента, то можно переопределить трейтовское
mr.
Типа в трейте совсем уж базовые правила будут?
mr.
А в модели которая заюзала, будет мердж с кастомными?
mr.
Ну тогда это не далеко от copyPaste ушло.
Vladislav
вопрос был в дублировании правил
Vladislav
трейты их решают
mr.
вопрос был в дублировании правил
Не вижу решения, покажи пример.
Vladislav
если у тебя валидация в AR, в форме и в поиске кардинально отличется, то не используй даный подхэод
Vladislav
но чаще там одно и то же
Vladislav
class Foo { use FooTrait; function rules() { return array_merge( ['my custom rules'], $this->commonRules() ); } } trait FooTrait { function commonRules() { return ['common rules']; } } $foo = new Foo(); var_dump($foo->rules());
Vladislav
array(2) { [0]=> string(15) "my custom rules" [1]=> string(12) "common rules" }
Vladislav
если отдельныхз правил нет, то function rules() { return $this->commonRules(); }
Vladislav
ну тогда не используй
Vladislav
кто заставляет то?
Vladislav
но тред начался с коммента
Vladislav
Стопэ, вопрос был не зачем, а почему так. На обеде подумал, и понял, что во всём виноват ~навальный~ AR паттерн, а точнее то что в Yii2 он ещё расширен от Model, которая позволяет модельку пихать в формы и *СРАЗУ* всё делать. Т.е. в "нормальных" ситуациях должна быть AR, *Form модели и *Search модели, но тут всплывает второй косяк, правила валидации придётся копировать...
Vladislav
" но тут всплывает второй косяк, правила валидации придётся копировать..."
Vladislav
трейты уберут это
Konstantin
правила валидации придется _частично_ копировать!
Vladislav
Ну я вот об этом и говорил)
я же не говорю для всех ситуация использовать это решение, а там где имеет смысл
mr.
правила валидации придется _частично_ копировать!
Спасибо, именно это я и имел в виду)
Vladislav
если это _частично_ составляет более 50% или туда вхоядт сложные правилаЮ, которые могут часто менятся
Vladislav
то будет удобно
Vladislav
иначе копируй
Vladislav
ибо нет серебрянной пули
Vladislav
под каждую задачу нужно свое наиболее приемлимое решение
Konstantin
я бы тупо копировал