Создание Yii2 extensions. Тонкости.
Создание Yii2 extensions. Тонкости.
Нужно создать extension в yii2.
Информации в доках крайне мало.
Например, не ясно как организовать работу с базой данных. Где-то встречалось мнение, что в extension не желательно использовать active records.
Как зарегистрировать extension в прилажении?
В общем, если есть подобный опыт, прошу им поделиться в данной теме.
Информации в доках крайне мало.
Например, не ясно как организовать работу с базой данных. Где-то встречалось мнение, что в extension не желательно использовать active records.
Как зарегистрировать extension в прилажении?
В общем, если есть подобный опыт, прошу им поделиться в данной теме.
Re: Создание Yii2 extensions. Тонкости.
>Где-то встречалось мнение, что в extension не желательно использовать active records.
Не верно.
Откройте 5-10 качественных расширений и посмотрите как они реализованы. Для начала попробуйте создать расширение - обертку, например какой-нибудь js библиотеки
Главное, ОБЯЗАТЕЛЬНО используйте стандарты оформления кода, принятые в Yii, composer и тд. Ну и если вы будете публиковать ваше решение, либо поддерживайте его в дальнейшем, либо укажите что вы создали его исключительно для себя, под вашу задачу и не рекомендуете его использовать другим как надежное решение
Не верно.
Откройте 5-10 качественных расширений и посмотрите как они реализованы. Для начала попробуйте создать расширение - обертку, например какой-нибудь js библиотеки
Главное, ОБЯЗАТЕЛЬНО используйте стандарты оформления кода, принятые в Yii, composer и тд. Ну и если вы будете публиковать ваше решение, либо поддерживайте его в дальнейшем, либо укажите что вы создали его исключительно для себя, под вашу задачу и не рекомендуете его использовать другим как надежное решение
- mihail_dev
- Сообщения: 243
- Зарегистрирован: 2013.07.17, 00:51
- Откуда: Молдова
- Контактная информация:
Re: Создание Yii2 extensions. Тонкости.
что именно вы подразумеваете под extension? это модуль какой то набор контроллеров или просто классы хелперы?
в принципе суть одна но в работе с каждым есть тонкости!
в принципе суть одна но в работе с каждым есть тонкости!
Re: Создание Yii2 extensions. Тонкости.
В данном случае у меня стоит задача сделать виджет для вывода комментариев в виде extension.Так как класс виджета наследует \yii\base\Widget.
Я так понимаю, что обработка формы отправки комментариев должна быть в методе run(), по типу кого, как в экшене контроллера.
Класс модели находится в папке с виджетом.
Правильно ли это или лучше передавать модель в виджет в конфиг.
Я так понимаю, что обработка формы отправки комментариев должна быть в методе run(), по типу кого, как в экшене контроллера.
Класс модели находится в папке с виджетом.
Правильно ли это или лучше передавать модель в виджет в конфиг.
Re: Создание Yii2 extensions. Тонкости.
Лучше в конфигеsitemast писал(а):или лучше передавать модель в виджет в конфиг.
Проект на Yii2 о Yii2. Блог, примеры кода, и многое другое о Yii Framework 2 и не только
Re: Создание Yii2 extensions. Тонкости.
>виджет для вывода комментариев в виде extension
скорей наоборот) extension в виде виджета что ли)
скорей наоборот) extension в виде виджета что ли)
Re: Создание Yii2 extensions. Тонкости.
Через конфиг должен настраиваться класс модели. Если пользователю вашего расширения понадобится расширить вашу модель то он отнаследует и изменит.sitemast писал(а): Правильно ли это или лучше передавать модель в виджет в конфиг.
Естественно ваша мадель тоже должна быть, изначальная такая, в БД таблица для нее через миграции.
Re: Создание Yii2 extensions. Тонкости.
Если у виджета есть view и model, то сохранение данных формы в видах происходит так же как в экшене контроллере - $model->save(), только в методе run() ?
Re: Создание Yii2 extensions. Тонкости.
1. Во view будь-то виджет или что-либо иное не должно происходить сохранения данныхsitemast писал(а):Если у виджета есть view и model, то сохранение данных формы в видах происходит так же как в экшене контроллере - $model->save(), только в методе run() ?
2. Нотация вида $model->save() по сути выполняет сохранение данных в модели
3. Если у виджета и есть модель, то скорее для получения данных, а не для записи
4. Да, в виджете действительно есть методы run() и init(). Условно, можно сказать, что в init происходит подготовка данных к некоторой логике, а в run та самая логика виджета
Проект на Yii2 о Yii2. Блог, примеры кода, и многое другое о Yii Framework 2 и не только
Re: Создание Yii2 extensions. Тонкости.
Я имею ввиду, что ,допустим у виджета вывода комментариев есть форма для комментирования. И $model->save() присутствует в методе run() виджета для того, чтобы сохранеть комментарий введенный в форму.ksetrin писал(а):1. Во view будь-то виджет или что-либо иное не должно происходить сохранения данныхsitemast писал(а):Если у виджета есть view и model, то сохранение данных формы в видах происходит так же как в экшене контроллере - $model->save(), только в методе run() ?
2. Нотация вида $model->save() по сути выполняет сохранение данных в модели
3. Если у виджета и есть модель, то скорее для получения данных, а не для записи
4. Да, в виджете действительно есть методы run() и init(). Условно, можно сказать, что в init происходит подготовка данных к некоторой логике, а в run та самая логика виджета
Такая логика будет правильной?
Re: Создание Yii2 extensions. Тонкости.
Технически - да.sitemast писал(а):Я имею ввиду, что ,допустим у виджета вывода комментариев есть форма для комментирования. И $model->save() присутствует в методе run() виджета для того, чтобы сохранеть комментарий введенный в форму.ksetrin писал(а):1. Во view будь-то виджет или что-либо иное не должно происходить сохранения данныхsitemast писал(а):Если у виджета есть view и model, то сохранение данных формы в видах происходит так же как в экшене контроллере - $model->save(), только в методе run() ?
2. Нотация вида $model->save() по сути выполняет сохранение данных в модели
3. Если у виджета и есть модель, то скорее для получения данных, а не для записи
4. Да, в виджете действительно есть методы run() и init(). Условно, можно сказать, что в init происходит подготовка данных к некоторой логике, а в run та самая логика виджета
Такая логика будет правильной?
Но, как вы собираетесь отправлять данные в виджет? Именно те данные, которые надо сохранить
Проект на Yii2 о Yii2. Блог, примеры кода, и многое другое о Yii Framework 2 и не только
Re: Создание Yii2 extensions. Тонкости.
В виджете в методе function run() передаю в вид return $this->render('comments', [ ''model' => $this->model, ]);ksetrin писал(а):
Технически - да.
Но, как вы собираетесь отправлять данные в виджет? Именно те данные, которые надо сохранить
И в том же методе делаю проверку
Код: Выделить всё
if ($this->model->load(Yii::$app->request->post()))
{
$this->model->writeData = date('Y-m-d H:i:s');//date('Y-m-d, H:i:s')
$this->model->ip = Yii::$app->getRequest()->getUserIP();
if ($this->model->validate() && $this->model->save()){
return Yii::$app->response->redirect(Yii::$app->request->referrer);
}
}
- mihail_dev
- Сообщения: 243
- Зарегистрирован: 2013.07.17, 00:51
- Откуда: Молдова
- Контактная информация:
Re: Создание Yii2 extensions. Тонкости.
создание экшинов в виджете это не правильно!
виджеты используются для вывода тех или иных блоков а не для обработки данных(частично обработка конечно может производится но очень специализированна допустим как работает yii\widgets\LinkPager в основном виджеты должны работать только с GET данными)!
делай связку виджет контроллер обработчик
в виджет передаются все необходимые данные
он отображает форму и данные
с формы данные передаются в контроллер там обрабатываются и возвращают юзер куда необходимо (дело техники)
если нужна передача данных без перезагрузки делайте на основе аякса
по поводу комментариев
скорее всего вам придётся сделать целый модуль если собираетесь что-то серьёзное делать так как надо отслеживать спам жалобы и тд всё это лучше сгруппировать в один модуль
в конфиге настраивайте модуль как вам нужно а в виджет допустим можно передавать название модуля (также можно зарезервировать название по умолчанию) и подтягивать все настройки из настроек модуля
виджеты используются для вывода тех или иных блоков а не для обработки данных(частично обработка конечно может производится но очень специализированна допустим как работает yii\widgets\LinkPager в основном виджеты должны работать только с GET данными)!
делай связку виджет контроллер обработчик
в виджет передаются все необходимые данные
он отображает форму и данные
с формы данные передаются в контроллер там обрабатываются и возвращают юзер куда необходимо (дело техники)
если нужна передача данных без перезагрузки делайте на основе аякса
по поводу комментариев
скорее всего вам придётся сделать целый модуль если собираетесь что-то серьёзное делать так как надо отслеживать спам жалобы и тд всё это лучше сгруппировать в один модуль
в конфиге настраивайте модуль как вам нужно а в виджет допустим можно передавать название модуля (также можно зарезервировать название по умолчанию) и подтягивать все настройки из настроек модуля
Re: Создание Yii2 extensions. Тонкости.
В save есть валидация, отдельный ->validate() не нужен. Не сохранять может потому что валидачия не пропускает, т.е. есть ошибки.Код: Выделить всё
if ($this->model->validate() && $this->model->save()){
Посмотри var_dump($this->model->validate()), model->errors, что там
Re: Создание Yii2 extensions. Тонкости.
Можно и сделать, почему нет.mihail_dev писал(а):создание экшинов в виджете это не правильно!
В первом yii виджет даже наследовался от базового контроллера, что как бы намекает.
И так проще и логичнее чем с action на некий контроллер.
По сути то виджет предлагает ввести данные , вот он их и обрабатывает.
А не так что action формы поставить на некий контроллер, получится:
- этот контроллер надо будет закрыть извне, не только по Посту но и мало ли для пользователей с какими правами тот виджет показался.
- при ошибках модели, он в виджете их и покажет, а так получится с контроллера надо редиректить назад на ту страницу где виджет с передачей ошибок через сессию.
Re: Создание Yii2 extensions. Тонкости.
что намекает на то, что весь слой view наследовался от контроллера (ошибка архитектуры) - только на это.maleks писал(а):В первом yii виджет даже наследовался от базового контроллера, что как бы намекает.
но все таки это view слой, а, значит, введенные данные должны быть отловлены в контроллере и переданы дальше во вьюшку для показа и в виджет для обработки.maleks писал(а):И так проще и логичнее чем с action на некий контроллер.
По сути то виджет предлагает ввести данные , вот он их и обрабатывает.
разве это проблема?maleks писал(а): А не так что action формы поставить на некий контроллер, получится:
- этот контроллер надо будет закрыть извне, не только по Посту но и мало ли для пользователей с какими правами тот виджет показался.
насколько я вижу, здесь не указан функционал разрабатываемого виджета.maleks писал(а):при ошибках модели, он в виджете их и покажет, а так получится с контроллера надо редиректить назад на ту страницу где виджет с передачей ошибок через сессию.
Re: Создание Yii2 extensions. Тонкости.
Вы говорили о виджете вывода комментариев, сейчас уже ставите другую задачу. Ваше расширение может содержать в себе и виджет и action и что угодно, хоть модуль. Виджет пусть отвечает исключительно за вывод комментариев + отображение формы
Re: Создание Yii2 extensions. Тонкости.
По моему замыслу виджет будет выводить комментарии и форму для добавления комментариев.Но, вероятнее всего, данные из формы будут отлавливаться в методе run() виджета. Там будет проверка на post и валидацию данных и вызов метода модели save().Поэтому я пока не вижу причин создавать контроллер для этого.S c писал(а):Вы говорили о виджете вывода комментариев, сейчас уже ставите другую задачу. Ваше расширение может содержать в себе и виджет и action и что угодно, хоть модуль. Виджет пусть отвечает исключительно за вывод комментариев + отображение формы
Re: Создание Yii2 extensions. Тонкости.
причина может быть одна - понимание mvc. Отсутствие понимания позволяет вам не видеть причин для создания контроллеров вообще.sitemast писал(а):Поэтому я пока не вижу причин создавать контроллер для этого.
Re: Создание Yii2 extensions. Тонкости.
С пониманием mvs все в порядке.Мне нужен совет как организовать систему комментариев через виджет по типу https://github.com/rmrevin/yii2-commentszelenin писал(а):причина может быть одна - понимание mvc. Отсутствие понимания позволяет вам не видеть причин для создания контроллеров вообще.sitemast писал(а):Поэтому я пока не вижу причин создавать контроллер для этого.