всем привет
не могу определиться как правильно поступить
в модуле хочется иметь набор независимых виджетов, которые бы вызывались чем-то централизованным - например главным виджетом
а может сделать компонент или расширение?
всем привет
не могу определиться как правильно поступить
в модуле хочется иметь набор независимых виджетов, которые бы вызывались чем-то централизованным - например главным виджетом
а может сделать компонент или расширение?
Юзкейс не помешал бы.
уот из юзкейс?
типа - что это должно будет делать?
Ну типа пока не очень понятно, что за штуку Вы хотите, и почему, допустим, нельзя вызывать виджеты из контроллера/вьюхи.
как и все новички хочу то чего пока не могу и не понимаю сути
на самом деле мне надо реализовать аутентификацию из соцсетей в своем модуле
есть замечательная штука на уровне расширения и очень простая штука для ламеров
и мне захотелось сделать аутентификацию "попроще" и на понятном мне уровне - на уровне виджетов
то что я хотел - я уже сделал и все работает
НО
как-то самому не очень нравится - код "не ремонтнопригодный"
как есть сейчас = это виджет, который вызывается так =
<?php
$this->widget('AuthWidget',array(
'services'=>array(
'facebook',
'vk',
'yandex',
'odnoklassniki',
'mail'
)
));
?>
внутри виджета такой run =
public function run()
{
$this->redirect_uri = 'http://mysite.ru'.Yii::app()->request->requestUri;
sort($this->services);
foreach($this->services as $val)
{
echo $this->Links($val);
}
$this->render('myview');
}
ну и соответственно метод Links, который на основе switch формирует ссылки и логику
все работает, но требует = грамотно-профессиональной доработки на основе мнения тех кто умеет больше меня
Всё еще непонятно.
Куда в этом коде Вы хотите присунуть "главный виджет"?
Понимаете, виджет из виджета вызвать - проблем никаких, но сначала бы понять, зачем это всё и как оно должно работать.
упс…так я жэж вроде написал как это должно работать
в представлении отображающем форму авторизации запускаем "главный" виджет,
который на основе поданных в него массива значений,
выводит ссылки для авторизации с помощью указанных социальных сетей
при клике на ссылку появляется поп-ап в котором юзер авторизуется на стороннем сервисе
теперь-то я осознал, что матрешка мне, видимо, не понадобится
зы: забыл сказать спасибо за подсказку, что вызвать виджет в видежете не проблема
и ставлю плюсик
Непонятка, собственно, связана вот с чем: в качестве примера Вы упоминаете oauth-авторизацию, а там на основе одного виджета все реализовано.
Штука вот в чем: виджет можно расматривать как мини-контроллер. У него есть своя логика и представления (более того, в некоторых извращенных случаях я ими и формы обрабатывал). В случае oauth логика у Вас будет примерно одна и та же, а вот представления (логин такой, логин сякой) могут различаться, поэтому если и городить огород, то именно в части разделения шаблонов (иначе получится дублирование). Ну и вообще конкретно oauth можно и с одной вьюхой сделать, поскольку страницу логина сервисы сами отдают.
Так-то виджеты много чего умеют: $controller = $this->controller; $action = $controller->action; и понеслась по накатанной в сторону non-mvc ада. Ну, вообще тут можно поспорить, конечно, имеет ли право виджет на какие-то вещи, или нет.
Чисто технически же он имеет доступ ко всему приложению.
оооо, спасибо! это слишком умно для меня!
использовать я буду 5 сервисов = ‘facebook’,‘vk’,‘yandex’,‘odnoklassniki’,‘mail’
различия в логике хоть и небольшие, но есть
пока пошел по пути отдельных классов для каждого сервиса, где каждый класс основан на одном супер-классе
в этом родительском классе определены все необходимы свойства и методы (как это сделано у перца с хабрхабра)
а в главном виджете я инициируют объекты нужных классов, указывая в конструкторе класса 3 главных параметра