@yii2ru

Страница 1051 из 1721
Ad.x ??
12.03.2018
18:24:20
Итак, флуд пошел, значит можно напрягать снова))) Делаю модули, в модулях есть внешние зависимости, что логично. Например - модель юзера, которая находится в другом модуле. Название ее класса передаю как параметр в модуль (через его конфиг), соответственно, в базовом классе модуля производится проверка интерфейса, и есть поле. В контроллере обращатся к модулю - не зазорно. Но есть модель. В модели есть связь именно на эту внешнюю модель юзера, класс которой передается через конфиг модуля. Можно, конечно, прямо в модели вызывать свойство модуля, я так раньше делал, но это ж вроде как плохо, да? Теперь передаю этот класс параметром при создании модели. Но! Так не получится, если модель берется через выборку, а не оператором new. Соответственно, пришлось в ActiveQuery модели переопределить методы all() и one(), и в контроллере передавать туда параметр. Насколько такой подход будет верным? Я просто пока что лутше не придумал. Модуль: https://pastebin.com/D7t53xNk Модель: https://pastebin.com/GKG137Dm Вызов в контроллере: ActiveQuery: https://pastebin.com/EgawVSu8 В контроллере вызов: $firms = Firm::find()->all(['userModel' => $this->module->userModel]);
это все кастыли как по мне

Matviy
12.03.2018
18:25:08
Так а как тогда такю зависимость передать?

такую

Ad.x ??
12.03.2018
18:27:20
к сожалению я не знаю. Тож долго думал на эту тему. и ниче толкового не придумал

Google
Ad.x ??
12.03.2018
18:27:45
решил забить болт и делать как все :)

либо, принять тот факт что за пределы фрейма ты свой модуль не выкинешь ) и тогда класть идентити модельку в контейнер под интерфейсом фреймовского идентити

уже оттуда дергать ее

Matviy
12.03.2018
18:30:03
А как все делают?)

Не, ну от фрейма отвязатся я и не планирую

Ad.x ??
12.03.2018
18:30:39
Можно, конечно, прямо в модели вызывать свойство модуля, я так раньше делал, но это ж вроде как плохо, да? вот так )

Matviy
12.03.2018
18:30:45
И тут ж н только про идентити, а вообще про зависимости

Но перекинуть в другой проект на том же фреймворке - чем плохо?

Кроме того, если минимизировать зависимости, проще вносить изменения потом, проверено уже

Ad.x ??
12.03.2018
18:31:33
тем что раскидаешь эти кастыли по всем проектам

потом покажется тебе что это херовая идея была, но будет уже поздно :)

Matviy
12.03.2018
18:32:32
Ну я тут вижу костыль только в части передачи параметра в результат выборки, а так прокидывать через сфойство модуля - неплохо, как мне кажется

Вот в выборку - лутше не придумал

Google
Ad.x ??
12.03.2018
18:33:25
тут в целом все сложно. даже если ты прокинешь эти зависимости. например в фильтре где-нибудь тебе понадобится список юзеров

ии... откуда их дергать? я вот хз

Matviy
12.03.2018
18:34:49
ТОгда делать в интерфейсе метод, который отдает всех юзеров, по другому никак. А в самой модели юзера реализовать интерфейс

В любом случае, так будешь точно значить, що звязи между модулями описаны в интерфейсах четко

И не париться, если меняэться что-нибуть другое

Ad.x ??
12.03.2018
18:39:09
http://www.yiiframework.com/doc-2.0/yii-web-identityinterface.html суда клади свою юзер модельку и потом забираешь с контейнера и делаешь чо нада

вот как делать связи... ваще вопрос )

Matviy
12.03.2018
18:41:17
Ну вот, так и много их

Ad.x ??
12.03.2018
18:44:01
был бы инжект через метод.. можно было бы что-то типа: public function getAdministrators(\yii\web\IdentityInterface $user) { return $this->hasMany($user::class, ['id' => 'user_id']) ->viaTable('{{%std_firms_administrators}}', ['firm_id' => 'id']); } м.б. через рефлексию или как

или попробовать через конструктор закинуть... бля )

но как это скажется на производительности...

Matviy
12.03.2018
19:06:22
Ну в моїм случае, производительность самого пхп - последнее, г чем нужно парится)

Ad.x ??
12.03.2018
19:08:43
в твоем случае нет интерфейсов

Matviy
12.03.2018
19:09:13
Есть

Если захочу

Ad.x ??
12.03.2018
19:09:31
без них смысла нет эти зависимости прокидывать

Matviy
12.03.2018
19:09:35
Пока что не нужно для юзера, но если будет еще что-то, то буду писать свои

По-сути, сейчас интерфейсы вот: DependenciesCheckHelper::checkClassHasParent($this->userModel, '\yii\db\ActiveRecord'); DependenciesCheckHelper::checkClassImplementsInterface($this->userModel, '\yii\web\IdentityInterface');

То есть, класс юзера должен быть потомком ЕктивРекорд и реализовывать АйдентитиИнтерфейс

Если есть что-то еще, тогда нужно уже свой писать для каждой зависимости, да это не сложно, вобщем

Google
Ad.x ??
12.03.2018
19:22:59
все не то

хэлперы эти

лишние )

Matviy
12.03.2018
19:28:02
Ну а как проверять интерфейс?

Это мой хелпер, просто чтоб не пихать всюду один и тот же код

Ad.x ??
12.03.2018
19:30:36
не знаю )

SiZE
12.03.2018
19:31:07
Ad.x ??
12.03.2018
19:32:17
оно все как-то очень и очень печально выглядит

(;¬_¬)
12.03.2018
19:32:39
посоны, там codeception поломали с 2.4.0

Matviy
12.03.2018
19:32:48
Ну так и проверяю. просто в хелпере реализована возможность проверять сразу несколько, и. т. д.

оно все как-то очень и очень печально выглядит
Мозможно, но лутше не вижу варианта)

Ad.x ??
12.03.2018
19:33:39
я вообще не вижу нормальных вариантов )

Matviy
12.03.2018
19:33:54
Ну вот. поэтому так делаю) Я ж по всякому пробовал

Тут же даже не по фреймворку вопрос, а в целом. Как-то же прокидываются зависимости

Со всех способов вариант с интерфейсами кажется самым нормальным

Классы передавать в свойства модуля, в модуле проверять на интерфейсы и другие ограничения, а там уже использовать, как хочется

Konstantin
12.03.2018
19:35:29
какая примерно зарплата в питере у прогера делающего лендинги, html верстку стили свой дизайн согласно заданию?

Ad.x ??
12.03.2018
19:36:07
по нормальному нада внедрять зависимости через контейнер, а не через свойства модуля )

и тут вот очко полное

Matviy
12.03.2018
19:36:39
по нормальному нада внедрять зависимости через контейнер, а не через свойства модуля )
Ну так я понимаю, внедрение через конфиг - это частный вариант внедрения через контейнер

Google
Matviy
12.03.2018
19:36:53
И через контейнер все равно в свойства записывают, разве нет?

Ad.x ??
12.03.2018
19:37:55
ну если там лежит что-то под интерфейсом, ты можешь быть уверен что оно реализовано

Matviy
12.03.2018
19:38:20
Или имеется ввиду прямо в главном классе модуля делать внедрение в класс модели?

Кстати, вариант. Я че-то не подумал

Ad.x ??
12.03.2018
19:38:43
а в твоем случае где гарантия, что есть метод какойнить типа: getOnlyEnabledUsers()

Matviy
12.03.2018
19:38:59
а в твоем случае где гарантия, что есть метод какойнить типа: getOnlyEnabledUsers()
Ну вот для этого и проверяется интерфейс, в котором он записан

Ad.x ??
12.03.2018
19:39:28
Да. но нужно же проверить, реализует ли класс интерфейс
уишный контейнер не положит что попало под интерфейс

только то что имплементит его

Matviy
12.03.2018
19:39:47
Честно-говоря, плаваю в нем еще)

Admin
ERROR: S client not available

Matviy
12.03.2018
19:40:28
как мне, допустим, заинжектить название класса юзера в класс модели фирмы в модуле, чтоб срау проверять интерфейс?

Я не совсем понимаю механизм

Ad.x ??
12.03.2018
19:40:57
в том то и проблема что никак )

то, что будет под интерфейсом, вернется объектом уже

Matviy
12.03.2018
19:43:07
Ну можна просто сначала проверить имплементацию интерфейса, и тогда инжектить

Ad.x ??
12.03.2018
19:43:35
допустим положим класс в контейнер: Yii::$container->set('psr\log\LoggerInterface', \monolog\Logger::class): а заберем уже объект: Yii::$container->get('psr\log\LoggerInterface');

и в конструктор заинжектится объект

че там придумать универсальное я даж не знаю... ебашить как все да и все )

Matviy
12.03.2018
19:45:43
Так я ж не объект, а название класса передать должен

Google
Ad.x ??
12.03.2018
19:46:01
ну так и я о чем

передашь название класса, потом будешь проверять 100500 методов есть там или нет

Matviy
12.03.2018
19:47:17
Так эти 100500 методов в интерфейс, и проверять, имплементит ли

Ad.x ??
12.03.2018
19:47:18
в ларавели выкрутились, фасады придумали :D

Так эти 100500 методов в интерфейс, и проверять, имплементит ли
уиишные интерфейсы их непредоставляют. свои будешь юзать? )

автоматом попадешь ровно в туже зависимость что и был ранее

Matviy
12.03.2018
19:48:35
Но таки лутше зависимости в классе модуля сразу инжектить, а не прокидывать через контроллер, это да. Переделаю

В чем проблема написать свой интерфейс, и его реализовать?

Ad.x ??
12.03.2018
19:49:45
в том что сторонние модули не будут его реализовывать, нада прокладку пилить

Matviy
12.03.2018
19:50:07
Сторонние не будут, но речь то идет о своих модулях

Ad.x ??
12.03.2018
19:50:24
своим модулям не нужны интерфейсы )

и без них нормально

что с ними что без них у тебя будет лютый монолит... так зачем выебываться?

Matviy
12.03.2018
19:52:28
Нужны, как минимум, чтоб видеть, в чем именно зависимость

Мне уже помагало

Ну нет, я ж говорю, попробовал так делать, уже легче стало

А не-монолит - это уже разбивать на отдельные приложения разве

Ad.x ??
12.03.2018
19:59:13
по мойму проще пилить какой-то скелет, и на него накидывать всякое мясо в виде модулей

фрейм на основе фрейма :D

Dmitriy
12.03.2018
20:01:15
А как все делают?)
не юзаем модули . если не получается их сделать не зависимыми

Matviy
12.03.2018
20:02:10
Так по-любому всегда всюду будут зависимости, или это модули, или сервисы, и т д

Dmitriy
12.03.2018
20:02:30
не будут

тот же юзер прокидывается как интерфейс

Страница 1051 из 1721