@yii2ru

Страница 289 из 1721
Konstantin
28.06.2017
21:00:26
свой класс например для отправки сообщений с сайта в телегу где размещать нужно?

это же не модель

Евгений
28.06.2017
21:01:52
Это компонент

Врапер над telegram-bot-api!))

Google
Konstantin
28.06.2017
21:02:43
почему это должно быть компонентом ?

его придется в конфиге подрубать

а я хотел по типу инклюда

где надо там и подрубил

Евгений
28.06.2017
21:05:07
extends Object, тебе события не нужны, легче будет, и да, подрубил в конфиге и потом дернул где нужно и publish()

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

Konstantin
28.06.2017
21:08:26
т.е. любой класс который ты захотел сделать не связанный с сайтом надо делать его компонентом?

а папку components в common или frontend ?

Компонент - это базовый класс, который реализует свойства, события и поведение. Блин ( мне кажется мой класс по отправке сообщения в телеграмм не является событием и поведением

Евгений
28.06.2017
21:16:09
Где угодно, главное чтобы тебя было удобно, если используется и со стороны фронта и на беке, то коммон, если где-то в одной части, то в ней соответственно ... да, такие вот не связанные компоненты повышают реюзабильность кода ... я например инклуды исп только для разбиения конфига на составные части для удобства, чтобы большим не был, например db redis rabbit и тд...

Михаил
28.06.2017
21:18:11
где надо там и подрубил
Подключение компонента в конфиге еще не значит, что он будет загружен. Только при первом обращении. А это и есть "где надо, там и подрубил", только с центральным конфигом

Konstantin
28.06.2017
21:19:13
yii\base\Object - я так не пробовал еще))

Google
Евгений
28.06.2017
21:19:33
Попробуй!)))

Konstantin
28.06.2017
21:21:25
ого как много у него Subclasses

это чо один из первоначальных классов ? Объект

Knock
28.06.2017
23:59:33
Привет всем, кто не спит. Столкнулся с неожиданной проблемой. Мне нужно перенести мои пхп классы из папки models в папку forms. Но почему-то когда перемещаю, он автоматом не исправляет пути. А если я это начинаю делать сам, то он попросту не видит app\models\forms. ЧЯДНТ? Гугол, зараза, молчит.

Сорян, в подпапку forms папки models.

Quaia
29.06.2017
01:12:57


Павел
29.06.2017
02:57:59
Я не много не понял после того как я передаю параметры get что с ними делать на сервере или я что то не так сделал ?
Ничего не делать. Пагинатор должен подхватить из строки запроса параметр страницы сам

Санёчек
29.06.2017
05:03:34
помогло?
помогло. спасибо

M
29.06.2017
06:27:54
Да

Только там боль с транситерацией из коробки, надо тюнить.

Konstantin
29.06.2017
06:42:14
почему боль, оно же вроде специально и заточено под это дело

M
29.06.2017
06:50:49
Не само расширение, а правила транслитерации в i18n такие, я как-то занялся вопросом, как по уму переопределить транслитиратор, но это столько действий требовало, ппц, так что проще по месту фиксить всё.

Сергей
29.06.2017
06:59:50
Доброе утро! Почитал немного про DDD... интересно, сложно, много дискуссионных моментов :) Хочу постепенно внедрить в проект, если я правильно понял, сервисный слой. Вижу это так: 1) Оставляем AR-модель. 2) Добавлю в приложении папку services, где будут т. н. сервисы (например, EmployeeService), в нем будут описаны все действия которые можно сделать с AR-моделью. 3) В контролере экшены будут выглядить примерно так: … Получение сущности и проверка доступа … try { $entityService->anythingDo(); } catch (\Exception $e) { … Обработка исключений … } … Вывод … Покритикуйте. Облегчит ли такой подход разработку с ростом проекта или я не вижу каких-то подводных камней, которые наоборот появятся и усложнят всё? Сейчас я действия с сущностями, которые используются в нескольких местах, тупо выношу в хелперы и вызываю... И вот от этого хочется избавиться.

Алимжан
29.06.2017
07:05:41
Доброе утро! Почитал немного про DDD... интересно, сложно, много дискуссионных моментов :) Хочу постепенно внедрить в проект, если я правильно понял, сервисный слой. Вижу это так: 1) Оставляем AR-модель. 2) Добавлю в приложении папку services, где будут т. н. сервисы (например, EmployeeService), в нем будут описаны все действия которые можно сделать с AR-моделью. 3) В контролере экшены будут выглядить примерно так: … Получение сущности и проверка доступа … try { $entityService->anythingDo(); } catch (\Exception $e) { … Обработка исключений … } … Вывод … Покритикуйте. Облегчит ли такой подход разработку с ростом проекта или я не вижу каких-то подводных камней, которые наоборот появятся и усложнят всё? Сейчас я действия с сущностями, которые используются в нескольких местах, тупо выношу в хелперы и вызываю... И вот от этого хочется избавиться.
Насколько я помню, вроде бы вызывается сервисный слой, а не работа с сущностью напрямую

M
29.06.2017
07:06:31
И сущность кидай в сервис)

Google
Алимжан
29.06.2017
07:07:43
Лично у меня сейчас в проектах что-то вроде public function actionRegister() { $form = new RegisterForm; $form->setAttributes(Yii::$app->request->bodyParams); if ($form->validate()) { return Yii::$app->userService->register($form); } return $form; }

Это REST

Сергей
29.06.2017
07:09:05
И сущность кидай в сервис)
Да, такое и хочу делать, Идея на вид простая. Берём классический Controller + AR. И делаем Controller + Service + AR. Controller создаёт AR-томдель, проверяет доступы и отдаёт в сервис, сервис уже выполняет все действия и если есть проблемы - вываливает исключение.

Но может что-то упускаю и не всё так просто :)

Dmitry
29.06.2017
07:10:13
В самом просто варианте - да, приблизительно так

Вместо Yii::$app->userService можно внедрять зависимостью в контроллер и писать $this->userService

Dmitry
29.06.2017
07:12:14
На вкус и цвет

Алимжан
29.06.2017
07:12:25
Сергей
29.06.2017
07:12:57
А если через статический метод модели? Employee::getService() ?

Алимжан
29.06.2017
07:13:15
@d_naumenko пользуясь случаем вопрос такой: где удобнее проверять на права доступа? В сервисном слое или в контроллере? Или может быть вообще в форме при валидации?)

А если через статический метод модели? Employee::getService() ?
Кажется будут проблемы с тестированием

Dmitry
29.06.2017
07:14:03
А если через статический метод модели? Employee::getService() ?
Да, во-первых тестирование, во-вторых не в ту сторону зависимости смотрят

Сергей
29.06.2017
07:14:24
Кажется будут проблемы с тестированием
Возможно... с тестами пока не работал :(

Делал так раньше, не понравилось)
А как сервис попадает сюда: Yii::$app->userService ?

Алимжан
29.06.2017
07:15:21
А как сервис попадает сюда: Yii::$app->userService ?
Тебе в документацию http://www.yiiframework.com/doc-2.0/guide-structure-application-components.html

Dmitry
29.06.2017
07:21:21
@d_naumenko пользуясь случаем вопрос такой: где удобнее проверять на права доступа? В сервисном слое или в контроллере? Или может быть вообще в форме при валидации?)
Смотря какие права :) Есть понятие "инварианты" - это валидация бизнес-правил вроде "нельзя создать Employee, если его ИНН уже принадлежит другому Employee". Такое в контроллере не проверишь, это идет в сервисный слой. А есть права доступа к операциям CRUD, реализующиеся через RBAC. Например "создать employee может только пользователь с permission=employee.create". Такое условие как раз хорошо описывается фильтрами в контроллере. Кроме того, бывают комплексные операции, вроде "импорт сотрудников из файла экспорта 1С", и там permission другой: "employee.import-from-1c". Заметь, что операция импорта - это парсинг + foreach(create), а пермишн - другой. Проверяя это в контроллере, проблем не будет. А если вынести такую проверку в сервис - придётся как-то костылять, чтобы обработать импорт. Уловил? :)

HIT
29.06.2017
07:28:53
есть ли готовое решение магазина на yii2, кто что может посоветовать?

Google
Алимжан
29.06.2017
07:28:56
Dmitry
29.06.2017
07:30:31
Спасибо за развернутый ответ (: Только вот последнее туговато дошло
У тебя есть операция "Импорт пользователей", которая по сути является операцией "Создание пользователя" в цикле. Но право импорта и право создания - разные права

Алимжан
29.06.2017
07:30:46
Т.е. все-таки лучше постараться все проверки делать в фильтрах/контроллере? А в сервисном слове можно проверить только для целостности?

Dmitry
29.06.2017
07:31:03
Можно иметь право импортировать, но не иметь права создавать и наоборот.

Алимжан
29.06.2017
07:32:54
Что значит "ВСЕ"?
Права и правила на совершение действия

Что значит "ВСЕ"?
Сейчас у меня все в длиннющих методах behavoirs : [ 'allow' => true, 'actions' => ['update'], 'roles' => ['updatePost'], 'roleParams' => ['postId' => Yii::$app->request->get('id')]; ], А внутри сервиса простая проверка по требованиям бизнес логики, где выкидывается Exception в случае ошибки.

Admin
ERROR: S client not available

Алимжан
29.06.2017
07:40:47
@d_naumenko Просто может быть есть что-то, что избавляет нас от метода behaviors на три экрана скролла?

Сергей
29.06.2017
07:45:31
@d_naumenko Просто может быть есть что-то, что избавляет нас от метода behaviors на три экрана скролла?
В поведениях не понравилось, легко забыть там что-то добавить/убрать. Делаю у себя проверку внутри экшенов: // Проверка доступа if (!Yii::$app->user->can('projectParamsEdit', ['project' => $project])) { throw new ForbiddenHttpException(); } Так и не придумал ничего умнее))

Александр
29.06.2017
08:03:21
оберни в функцию помощник ensureAllow...

Сергей
29.06.2017
08:04:15
Александр
29.06.2017
08:06:11


не будет ифов лишних по всем экшенам, и в будущем легко отрефакторить

Сергей
29.06.2017
08:07:51
не будет ифов лишних по всем экшенам, и в будущем легко отрефакторить
Спасибо, буду использовать. Вообще вот это думаю внедрить в проект: https://github.com/samdark/yii2-cookbook/blob/master/book/structure-global-functions.md

Александр
29.06.2017
08:08:03
да, это туда и ляжет

ничего страшного в глобальных функциях нету, ускоряет разработку, если проект закрытый (не open source) - стоит однозначно использовать



еще плюс - автокомплит для кастомных компонентов, если ты не хочешь переопределять Yii класс (чтобы описывать компоненты через phpdoc), но хочешь автокомплит своих компонентов - кидаешь их в глобалы

Google
Vladislav
29.06.2017
08:10:31
какой то страшный набор костылей, удобный только их автору

Александр
29.06.2017
08:11:16
что страшного?

Павел
29.06.2017
08:11:24
А зачем это?

Может проще автокомплит IDE настроить и не париться?

Александр
29.06.2017
08:11:45


как настроить автокомплит, если IDE не знает о кастомных компонентах?

А зачем это?

Может проще автокомплит IDE настроить и не париться?

Сергей
29.06.2017
08:12:32
Если без фанатизма, то глобальные функцию в закрытом проекте - мне кажется очень удобны

Александр
29.06.2017
08:12:41
два варианта - переопределить Yii класс, и в phpdoc описывать компоненты, или использовать шорткаты

все верно

Если без фанатизма, то глобальные функцию в закрытом проекте - мне кажется очень удобны

Александр
29.06.2017
08:14:08


а чем это не хелперы?

а кто мешает хелперы просто юзать?

Юрий
29.06.2017
08:15:48
хотя функции там банальные

Александр
29.06.2017
08:15:58
аргументов от Павла и Владислава не услышал - возвращаюсь к работе

Stepan
29.06.2017
08:16:27
Ну например тем что не явно где они лежат и идеально будет работать автокомплит

Сергей
29.06.2017
08:16:36
if (!Yii::$app->user->can('projectParamsEdit', ['project' => $project])) { throw new ForbiddenHttpException(); } vs use ххх/xxx/AccessHelper; AccessHelper::can('projectParamsEdit', ['project' => $project]); vs can('projectParamsEdit', ['project' => $project]);

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