Dmitriy
Yii::createObject(['class' => queryClassName, ...]) и компонент готов
спс. за костыль. все равно это сервис локатор
Dmitriy
хочется через конструктор пробрасывать
Dmitriy
дабы тесты были норм
KoJIT
спс. за костыль. все равно это сервис локатор
почему сервис локатор ? это просто создания инстанса с использованием yii-го DI. Все что передается в массиве (кроме class) передается в конструктор и объект заполняется.
Dmitriy
Потому что мы перекидываем зависимость не в конструктор. И да мы перекидываем реализацию а не интерфейс
Dmitriy
перекидывать реализацию это дно
Dmitriy
У queue например нет интерфейса .
KoJIT
Если нет интерфейса это плохо. Не совсем понял с перекидыванием, можешь показать пример ? И насколько мне известно объект либо создается внутри, либо перекидывается ссылка на него через конструктор или сеттер
Dmitriy
как хорошо. public function __contruct(QueueInterface $queue) как плохо public function __construct(){ $queue = Yii::createObject(['class' => queueClassName, ...]) }
KoJIT
понял, а чем плох такой вариант ? $queue = Yii::createObject(['class' => queueClassName, ...]); $form = Yii::createObject(['class' => formClassName, 'queue' => $queue, ...]); protected $queue; public function setQueue(QueueInterface $queue) { $this->queue = $queue; }
Dmitriy
Куда это писать то ? setQueue мы сами должны сделать ? что бы вызвать очередь . Я не понял где это применяется
KoJIT
Куда это писать то ? setQueue мы сами должны сделать ? что бы вызвать очередь . Я не понял где это применяется
К примеру в контроллере $queue = Yii::createObject(['class' => queueClassName, ...]); $form = Yii::createObject(['class' => formClassName, 'queue' => $queue, ...]); Внутри в форме (отнаследованно от Model) protected $queue; public function setQueue(QueueInterface $queue) { $this->queue = $queue; } При создании будет вызван Сеттер т.к queue protected
Stas
кто то юзал платежку Fondy?
Ярослав
@KoJIT Дима тебе показал один из способов внедрения зависимостей, главное, чтобы ты понял общую идею А как ты будешь их внедрять через метод или через конструктор зависит уже от конкретной задачи Вот полезная статейка по видам Dependency Injections http://coders-kitchen.com/2015/01/05/dependency-injection-field-vs-constructor-vs-method
Ярослав
Вообще Service Locator в определенных ситуациях является антипаттерном , нарушая SOLID Об этом есть много статей и столько же мнений Кому интересно можете погуглить на эту тему
Joel Ex
всем привет, подскажите новичку, есть ссылки типа: site.ru/user/edit/id1 как лучше организовать чтоб другому пользователю запретитить просматривать другие id, а только те id которые ему принадлежат
Joel Ex
ок, спасибо
Михаил
Здарова парни, подскажите плз вот есть такй урл http://new.loc/product/view?id=6 как сделать чтобы урл был типа http://new.loc/Lodki/motor-veterok
SiZE
UrlManager, Rule
Михаил
UrlManager, Rule
не очень помогло
Dmitry
не очень помогло
что именно не помогло? описал правило для роута?
Михаил
сейчас скину запись
Михаил
'product/<slug:[w-]+>' => 'product/view'
Михаил
это правило
Михаил
Url::to(['product/view','id' => $category['id'], 'slug' => $category['url']])
Dmitry
а не работает что? переход или вывод ссылки?
👻
Url::to(['product/view','id' => $category['id'], 'slug' => $category['url']])
Url::to(['product/view', 'slug' => $category['url']]) наверно так будет работать
Dmitry
нет, не работает пробовал
он у тебя ссылку не верную выдает?
Михаил
ошибку
Михаил
http://skrinshoter.ru/s/281017/c6e8uJq2?a
Dmitry
http://skrinshoter.ru/s/281017/c6e8uJq2?a
у тебя ссылка не верная
Михаил
когда вот так пишу
Михаил
Url::to(['product/view', 'slug' => $category['url']])
Dmitry
Url::to(['product/view', 'slug' => $category['url']])
ты настройки из раздела "Человекопонятные URL" сделал? http://stuff.cebe.cc/yii2docs-ru/guide-runtime-routing.html
Михаил
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ '<action:(about|contact|login)>' => 'site/<action>', 'product/<slug:[w-]+>' => 'product/view' ], ],
Михаил
djn vjb yfcnhjqrb
Михаил
вот настройки
Roman
в акшене же написан параметр ID
Roman
вот и 400
Roman
а суете слуги
Михаил
мне нужнвот есть такй урл http://new.loc/product/view?id=6 как сделать чтобы урл был типа http://new.loc/Lodki/motor-veterok
Roman
ну так акшен нужно переделывать
Михаил
что в экшен передавался не id а slug &
Михаил
я тправильно понял ?
Михаил
ок, сча попробую
Михаил
чтото получилось
Михаил
но не до конца
Михаил
)
Михаил
теперь генерируется такой урл http://new.loc/product/wdasaw?id=5
Михаил
как убрать в конце ?id=5
Михаил
&
Михаил
?
👻
Убери айди из формирования урла
Михаил
в правилах прописать ?
Михаил
или как ?
Михаил
чет не догоняю
Dmitry
чет не догоняю
если тебе id не надо, не передавай его
Dmitry
или пропиши в правиле, если надо
Borys
Borys
В доке пример есть
Borys
Ссылку тебе выше скинули, ты пишешь неправильное правило, естественно оно не отрабатывает
Михаил
'product/<slug:[\w-]+>' => 'product/view'
Михаил
вот правило
👻
тут верно
Dmitry
вот правило
где тут id ?
Михаил
нету
👻
а у тебя в формированиии ссылки идет айди вот оно тебе его и ставит
👻
тогда ему не откуда браться
Михаил
'product/<slug:[\w-]+>' => 'product/view' суда можно жописать чтобы айди не показывало ?
👻
у тебя тут все верно
Михаил
если в контролере передаю не айди, не находит нужную страницу
👻
ну значит у тебя в контроллере идет поиск по id а тебе надо его заменить на поиск по slug
👻
и все будет работать
Dmitry
если в контролере передаю не айди, не находит нужную страницу
вот так напиши 'product/<id:[\d]+>' => 'product/view' для id