Доступна оплата мастер-классов российскими и иностранными картами, ЮMoney, быстрыми платежами СБП и SberPay

Мастер-класс по разработке интернет-магазина на Yii2

После познания дзена на интенсиве по ООП многие просили сделать что-нибудь посущественнее на Yii2 Framework, чтобы применить новые знания на практике. И даже на форуме упомянули,

Как и обещал в блоге, в этом мае запустим большой многодневный практический онлайн мастер-класс по интернет-магазину на Yii2 с использованием лучших практик разработки и архитектуры.

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

Как и на прошлом интенсиве это будут вечерние онлайн-стримы по понедельникам, средам и пятницам примерно с 19:00 по московскому времени. С выкладыванием видеозаписей и исходного кода после каждого урока в личном кабинете ученика. Так что если не сможете присутствовать онлайн и переписываться в чате, то сможете спокойно смотреть всё в записи и присылать вопросы на почту.

Если решили круто провести время в интересной компании, то подключайтесь к нам:


Перейти на страницу и приобрести записи


По оплате имеется гарантия возврата средств и возможность внести предоплату и доплатить позже. На почту отправил скидочные купоны для участников прошлых интенсивов. Для оплаты от юрлица напишите мне на почту или в обратную связь.

До встречи с участниками на мастер-классе!

Комментарии

 

Виктор

Очень интересно, вопрос в цене )

Ответить

 

Andrewkha – sportforecast.net

Дмитрий, просто отличная новость!

Вопрос только один - примерная цена? :)

Ответить

 

Дмитрий Елисеев

Добавил.

Ответить

 

Владимир

У тебя лучшая инфа во всем русскоязычном интернете по теме Yii всем что полагается совместно с ним знать!

ROI от курса ООП 10000% не меньше! Если новый курс будет до 10к это превосходно!

Мб 11-12т и Yii2 Cookbook в подарок?)

Ответить

 

Леша

крута, ждемс

Ответить

 

Алексей

Жду с нетерпением

Ответить

 

Олег – zakaz26.ru

Очень жду, пошел копить деньги...

Ответить

 

Иван

Хорошая новость. Участвуем.

Ответить

 

Дмитрий

Ура!

Ответить

 

hawk

Круто! очень жду!

Ответить

 

Николай

Приветствую. А будут рассматриваться такие вещи как тонкости реализации каталога товаров на базе деревьев nestedSet, тонкости работы с ленивой и жадной загрузкой, и подключение каких то сервисов типа яндекс.касса или вебмани? Все таки интернет магазин без функции онлайн-оплаты, выглядит как то не полноценно. Понятное дело, что в этом можно разобраться "по ходу", но так можно сказать обо всем, в том числе и например о кешировании, или использовании БД. Все таки онлайн-магазин это возможность купить что-то. ))
Спасибо!

Ответить

 

Дмитрий Елисеев

Да, деревья категорий и платёжная система будет. Как и остальные тонкости по улучшению производительности вроде жадной загрузки и кеширования.

Ответить

 

Артур

Вау супер!!!! =)
Дмитрий, пожалуйста, выпускайте ещё подобные практические курсы, ведь когда смотришь и вникаешь как вы пишете, начинаешь лучше понимать и перенимать практики.

Честно скажу у меня на работе пишут лапшу, никто ООП код не пишет, и даже самые опытные у кого по 7-10 лет за плечами пишут в процедурном стиле, это кошмар. К сожалению у таких людей не чему учиться. А у вас есть чему, и то что я сказал это боль большинства контор, люди работают но если ты хочешь писать лучше, то вероятно ты один такой в конторе из 15-20 человек. Ваши знания людям нужны как воздух.

Ответить

 

Сергей – akvasfera-sauna.ru

У меня на работе точно также.
Работаем с немаленькой системой, написанной на дикой мешанине php msql html css js jquery все вместе почти в каждом файле!
Про ООП - не, это плохо.
На фреймворк переходить не хотят.
Такая жизнь=)

Ответить

 

Иззет Фатуллаев

Отлично, жду с нетерпением

Ответить

 

Николай

Вопрос по формату интенсива. Что будет рассматриваться в режиме "онлайн-видео", будут ли домашние задания, что делать, если не будет времени делать ДЗ или присутствовать на видео-лекциях?

Ответить

 

Дмитрий Елисеев

Если нет времени, то, как и упомянул, можно смотреть в записи. На дом буду задавать только дополнительные материалы для чтения к следующим урокам.

Ответить

 

Spirit Absolute

Дмитрий, подскажи где старый курс по ооп приобрести можно? Можно ли будет новый курс потом купить ? Работа, семья, нет времени на курсе полноценно быть. По вечерам часик-два ковыряться по видео было бы хорошо. ;)

Ответить

 

Дмитрий Елисеев
Ответить

 

Владимир

Если покупается товар А вместе с Б, то скидка покупателю и бонус продавцу.
Вот такое тоже хочется узнать как делается.

Ответить

 

slo_nik

День добрый.
Отличная новость... И как всегда неожиданно... Срочно пересматривать и перечитывать предыдущие статьи, видео и тому подобное...))))
Благодарю за то, что не забываете нас.
Жду подробного расписания.

Ответить

 

Александр

Добавьте работу со Spihnx

Ответить

 

Дмитрий Елисеев

Вместо него ElasticSearch.

Ответить

 

Павел

Хорошая новость.
Особенно интересуют след. вопросы
1. Организация js. Как положить товар в корзниу аяксом, изменение количества товара в корзине, удаление из корзины. Сейчас есть проблемы
2. Скидки. Как организовать постоянные скидки конкретным покупателям и при этом что б сортировка по цене грамотно была организована.
3. Выгрузки xml. Сейчас выгрузки пишу в процедурном стиле, вроде норм, но может есть лучшие способы.
4. Фасетный поиск по атрибутам. Как сделать фасетный поиск по атрибутам, если количество атрибутов растет, и постоянно редактировать sphinx.conf задалбывает.
5. УРЛ для поиска и фильтров. Хочется красивые урл для поиск и фильтров, а пока получается типа
/search?SearchForm[q]=ботинки. Хочется /search?q=ботинки.

Ответить

 

Интересно

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

Ответить

 

Дмитрий Елисеев

Из последних крупных осенью с женой проходили Эволюцию за 23к. Сейчас проходим Спарту за 33. Ну и по мелочи примерно на 50к наберётся.

Ответить

 

Дмитрий

Дима, ну и как эти курсы? Я что-то не рискнул туда деньги занести. Что-нибудь заработалось? На какую-нибудь сумму вышли существенную?

Ответить

 

Дмитрий Елисеев

По старому проекту в Эволюции подкрутил РСЯ на рост в два раза. Теперь выходим на прямых рекламодателей. Сейчас на Спарте для двух новых сайтов ядра собираем.

Ответить

 

Дмитрий

Короче, деньги на ветер как я понял. А самим разобраться как они собираются очень сложно?

Ответить

 

Дмитрий Елисеев

Эволюция у меня уже окупилась. Мне проще «занести» пару раз в год прошаренному эксперту с сотнями сайтов, который в теме всех современных нюансов, чем влить в сайты 100+к наугад.

А если тупить, ныть на Обаму и ничего не делать, то всё будет «на ветер».

Ответить

 

Дмитрий

Ладно, когда мало конкретики, то спор получается не о чем. Спорить дальше не будем. Пусть каждый тратит свои деньги как ему нравиться.

Просто может у меня видение другое. Сегодня можно сделать сайт с уникальным, полезным контентом для людей с достаточно большим количеством страниц. От ниши конечно многое чего зависит. Сайт может быть обычным каталогом. Этого вполне достаточно, чтобы туда воткнуть какую нибудь рекламу на первоначальном этапе.

Со временем, да могут появиться прямые рекламодатели. Все просто на словах. А вот поднять ресурс, снабдить его уникальным контентом для людей, целая история. Но как только это будет появляются уже совсем другие проблемы. Просто понимание того, что нужно делать тоже приходит не сразу.

Не целесообразно тратить деньги на то, что и так понятно. Делай хороший сайт и этого вполне достаточно. Зачем платить деньги тем, кто скажет тебе тоже самое? Вот этого я не понимаю.

Ответить

 

Диман Диманов

Судя по всему вы живете в каком иллюзорном мире и не особо разбираетесь. Сайтов с хорошим контентом полно и с плохим полно. И популярность их не всегда связана с их качеством контента.
Как продвинуть и раскрутить сайт целая наука, это далеко не очевидно. Шишек себе набьешь кучу пока начнет получаться.
можно вложить в сайт несколько миллионов и дальше 1к пользователей не продвинутся.

Ответить

 

Дмитрий

Ну я же не сказал, что это просто. Пока шишек не набьёшь вряд ли что-то будет получаться хорошо. Для начинающих, да это не очевидно совсем. Не все сразу

Ответить

 

xfg

Рунет давно превратился в помойку. Статьи оптимизированны настолько, что их невозможно читать. Самому яндексу похоже пришло время уйти в историю, который не в состоянии индексировать современные SPA сайты. Сомнительная затея ставить на компанию, которая ежегодно теряет 2-3% рынка с технологиями поиска из 90ых годов и платить за это деньги. Яндекс к сожалению проиграл борьбу. Они скупают проекты как mail.ru, потому что понимают, что потеря рынка поиска это вопрос времени.

Ответить

 

Дмитрий

Вот поэтому не стоит делать ГС-ы. А Google уже научился индексировать SPA сайты? Наверное где-то вы правы в ваших утверждениях. Время покажет сможет ли Яндекс перестроиться и адаптироваться под современные реалии.

Ответить

 

Виталий

Дмитрий, если график занятий будет удобный, то я с вами!

Ответить

 

Альберт

Дмитрий, а можно будет пораньше начинать занятия не с 8 а с 6 вечера, а то разница во времени большая?

Ответить

 

Дмитрий Елисеев

Можно с 19:00.

Ответить

 

Sergey Vlassiuk

Не, лучше с 8-ми вечера
На работе минимум до 7-ми

Ответить

 

Иван

Согласен. Лучше все-таки с 8.

Ответить

 

Олег

Дмитрий, у меня такой вопрос. Мне очень интересен тот функционал, который Вы собираетесь разработать в этом ИМ, но мне сам фреймворк YII2 не очень нравится.

Я сделал на нем простенький интернет-магазин, а потом случайно зацепился за Laravel. На нем мне разрабатывать кажется намного проще и удобнее. Если у меня будут вопросы типа: "А как это сделать на Laravel?" Вы сможете мне ответить? Особенно меня будет интересовать поиск по атрибутам товаров.

Ответить

 

Дмитрий Елисеев

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

Ответить

 

Алексей

Доводилось ли вам сталкиваться с Drupal osCommerce?

Ответить

 

Дмитрий Елисеев

Нет.

Ответить

 

Александре

Дмитрий, я покупал у вас записи интенсива по ООП рассказываете доступно интересные вещи! все супер! Хочу спросить: возможно ли будет купить записи и исходники курса по интернет-магазину, после того как он пройдет, несколько дешевле, чем обошлась бы онлайн версия?

Ответить

 

Дмитрий Елисеев

Половина участников и так будут всё смотреть в записи и задавать вопросы на почту, так как по времени не успевают. По отношению к ним продавать записи дешевле будет не очень честно.

Ответить

 

Дмитрий

Дмитрий, а напишите, пожалуйста кому подходит этот курс. Какими начальными знаниями нужно обладать, чтобы курс был полезен? В общем, что нужно знать в PHP? Спасибо.

Ответить

 

Дмитрий Елисеев

Если хотите просто посмотреть, как это делают, то можно и вообще без знаний. В большей степени информация будет полезна по работе не только с Yii. И я там всегда объясняю, что делаю и для чего. А так желательно хотя бы иметь некоторе представление о фреймворках и объектно-ориентированном программировании.

Ответить

 

Дмитрий

Просто посмотреть не интересно. Хочется прокачать свои знания. Перенять более правильные решения и подходы. У вас такое будет? )

Ответить

 

Дмитрий Елисеев

Да, это весь курс про лучшие практики.

Ответить

 

Иван

Здравствуйте, Дмитрий!

Очень интересуют, а будут ли какие-нибудь скидки для тех, кто покупал у вас OOP-week? К сожалению, я как студент, наверное, курс за такую цену, увы, себе позволить не смогу. а очень-очень хочется.

С уважением!

Ответить

 

Дмитрий Елисеев

Да, для прошлых участников скидка всегда будет. И рассрочка для всех.

Ответить

 

Иван

Спасибо. Обязательно буду следить за статусом вашего курса. Очень хотелось бы применить какие-то знания, научиться чему-то новому :)

Ответить

 

vitus

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

Ответить

 

Дмитрий Елисеев

Ну да, можно как раз после праздников начать.

Ответить

 

dims

Здравствуйте, а вообще насколько yii2 популярный, то есть можно по нему найти заказы новичку. За границей больше laravel-ом пользуются, а в СНГ как?

Ответить

 

Дмитрий Елисеев

За границей Laravel, в России самый популярный Yii2.

Ответить

 

Romario

Еще бы в курс добавил хотя бы чуть-чуть чуть про генерацию доки по рест апи. Swagger например

Ответить

 

Дмитрий Елисеев

Можно. А так хочу по Swagger ещё отдельную статью опубликовать.

Ответить

 

Александр

В этот раз планирую присоединиться. Ждем.

Ответить

 

Иван

Дмитрий, предлагаю добавить немного информации для юр. лиц. Чтобы было удобно оплачивать на расчетный счет по договору.

Ответить

 

Дмитрий Елисеев

Хорошо.

Ответить

 

Denis Klimenko

очень рад)

Ответить

 

Вадим Кулик

Супер жду.

Ответить

 

Maxim

Жду с нетерпением! Хочу платить! :)

Ответить

 

Sergey Chernosvitov

Дмитрий, с удовольствием запишусь на этот курс! Так как очень понравился курс по ООП.
Просьба попробовать сделать урок с календарем. Имеется ввиду сделать функционал наподобие планирования на календаре могли отображаться или закупки или продажи товара (если реализуется интернет-магазин). А так же при нажатии на событие или день недели в календаре переходили на форму (или всплывающая форма) редактирования данного события.
Задачи планирования часто попадаются и их интересно реализовывать в виде календаря.

Заранее спасибо!

Ответить

 

Антон

Проходил интенсив по ООП, читал статьи. Могу сказать, что курсы у Дмитрия единственные годные курсы, которые я нашёл в интернете. Из более-менее нормальных пробовал ещё хекслет, но от них толку почти нет.
Работаю junior разработчиком. Курсы и статьи Дмитрия реально прокачивают навыки и помогают в работе. Хотелось бы ещё больше статей по архитектуре, по ООП без привязки к Yii.
Также очень бы хотелось курс от Дмитрия по алгоритмам и структурам данных.
Надеюсь такое возможно)

Ответить

 

Leon Ziger

А почему от хекслета толку нет?

Ответить

 

Антон

Потому, что на теоретических занятиях они пересказывают очень кратко документацию.

А практические занятия ещё более бестолковые. Они по большей части оторваны от практики, не согласованы между собой даже в рамках одного курса!

Создаётся впечатление, что основная цель хекслета, это зарабатывание денег. Всё очень-очень сыро. Хотя задумка была неплохая.

Вообщем, в работе хекслет мне ни капельки не помог, хотя я прошёл на нём большую часть курсов по web-разработке.

P.S. На работе сталкиваюсь с очень разными задачами. Сайтоклепательства нет.

Ответить

 

Leon Ziger

Антон, спасибо за Ваш ответ. Лазил по Хекслету, но мне показалось, что там в основном js-ники преподают о js, а мне по работе пхп нужно.
Пока вот собираюсь приобрести Неделю ООП, но чтобы знания не растворились хочется их привязать к чему-то практичному, к какому-то проекту. Поэтому с интересом тусю в этой теме.

Ответить

 

Антон

"Неделя ООП" - хороший курс. Приобретайте, не пожалеете.
Только его придётся пересмотреть несколько раз.

Ответить

 

Leon Ziger

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

Ответить

 

Антон

Ну если основы программирования на php знаете, то поможет.
По крайней мере задаст нужный вектор.
А вообще, трудоустройство на позицию "хотя бы пхп-джуна" процесс не очень быстрый. Потребуется не мало времени и сил для самостоятельной работы.

Ответить

 

Leon Ziger

Азы знаю. Когда то сайтики для заработка на пхп делал. Знал бы лет 5 назад, что будет актуальнее программером работать, чем манимейкерством страдать, тогда бы откорректировал свои знания.

Ответить

 

Евгений

Дмитрий, создание интернет-магазина как-то связано с YupeCms, или будем писать магазин с нуля? (хотелось бы минимум зависимостей, желательно с нуля)

Ответить

 

Дмитрий Елисеев

С нуля.

Ответить

 

Евгений

Спасибо, тогда с удовольствием присоединюсь к данному мастер-классу.

Ответить

 

Альберт

Хотел спросить, а мультиязычность будет?

Ответить

 

Михаил

Тоже интересует вопрос мультиязычности ?

Ответить

 

Дмитрий Елисеев

Интерфейс переводится через Yii::t(...), содержимое - через добавочную таблицу с поведением вроде этого. Возня с этим в мастер-классе только сильно усложнит код без особой пользы для понимания.

Ответить

 

Igor Goldberg

Спасибо за вашу работу.
Делаю ставку на ваш мастер-класс по Yii2.
Буду ждать оповещения о начале курса.

Ответить

 

Эдуард

По поводу тестирования, что можете сказать про актуальность Behat и что это? Или достаточно юнит тестов и codeception?

Ответить

 

Дмитрий Елисеев

В Behat мы пишем тестовые сценарии:

Scenario: Adding products to the cart
  Given there is a clean cart
  When I add 3 pieces of 5 product
  Then I should have 3 peaces of 5 product
  And I should have 1 product
  And the overall cart amount should be 3

и к ним программируем заготовки этих предложений с подстановками:

class CartContext implements SnippetAcceptingContext
{
    private $cart;

    /**
     * @Given there is a clean cart
     */
    public function thereIsACleanCart()
    {
        $this->cart = new Cart(['storage' => new FakeStorage()]);
    }

    /**
     * @Then I should have :pieces peaces of :product product
     */
    public function iShouldHavePeacesOfProduct($pieces, $product)
    {
        PHPUnit_Framework_Assert::assertArraySubset(
            [intval($product) => intval($pieces)],
            $this->cart->getItems()
        );
    }

    ...
}
Ответить

 

Вячеслав Подрез

Как записаться, куда платить?, нет информации!

Ответить

 

Дмитрий Елисеев

В понедельник будет. И в рассылке сообщу.

Ответить

 

Алексей

Нашел деньги, настроился, жду - сучу ногами от нетерпения :)

Ответить

 

Дмитрий

Вы продаете мастер-класс по разработке ИМ на Yii2. Значит у Вас должны быть успешные проекты. Могли бы вы дать ссылки на эти магазины (или магазин) и сказать что я смогу сделать такой же после мастер-класса.

Ответить

 

Дмитрий Елисеев

Из похожих открытых проектов есть магазин запчастей и аксессуаров со сложными привязками к маркам, моделям, размерам колёс и т.п. Ещё был магазин одежды с совместными покупками и филиалами.

Помимо этого делал CRM для лендингов, портал аукционов и автосервисов, торговую биржу с продавцами и покупателями, сайт объявлений и прочие вещи. Но это к «просто магазинам» не относится.

Ответить

 

Дмитрий П

Это наверное другой Дмитрий. Спасибо за ответ.

Ответить

 

Дмитрий Елисеев

Добавил программу уроков.

Ответить

 

Павел

Хорошая новость. Есть возможность добавить помимо обычного поиска на эластике еще и фасетный. Очень часто пригождается

Ответить

 

Дмитрий Елисеев

Да, фасетный (агреггирующий) тоже будет.

Ответить

 

Дмитрий

Смогу ли я купить записи этого курса с полученной скидкой (как участник 3го потока ООП), т.к. не смогу по времени онлайн смотреть их, удобнее после окончания купить просто запись.

Ответить

 

Дмитрий Елисеев

Да, скидка действует всегда.

Ответить

 

Вася

Буду немного занят в это время. Но инфа для меня имеет большой практический интерес. Запись когда будет доступна и за сколько килорублей?

Ответить

 

Дмитрий Елисеев

Будет доступна за столько же.

Ответить

 

Дмитрий

Привет Дмитрий!
Благодаря тебе, Дима, я нашел себе работу. Однако, продолжаю следить за новостями от тебя и спонсировать твои разработки. Спасибо, Дима!

Ответить

 

Андрей

Здравствуйте, Дмитрий.
Почему в курсе решили использовать Vagrant, а не Docker?

Ответить

 

Дмитрий Елисеев

Vagrant проще.

Ответить

 

Сергей Ильичев

Отлично, я с вами. Жду начала занятий)

Кстати, будет ли в день начала какая-то инструкция о том, где что и как? А то я первый раз в таком семинаре принимаю участие и, пока смутно представляю, как проходят подобные мероприятия. Где допустим трансляция проходит, туда доступ по какой-то учетной записи только? Я просто пока только на вашем блоге зарегистрирован.

Ответить

 

Дмитрий Елисеев

Да, перед началом разошлю подробную инструкцию.

Ответить

 

Володимир Гривінський

2 года назад я б с радостью записался на ети курсы.((

Ответить

 

Михаил Качусов

Дмитрий, добрый день - не могу понять оплата прошла или нет - антивирус ругался просто.
order reference number: 31335768
Order complete. All products/services have been delivered.

Ответить

 

Дмитрий Елисеев

Прошла. Всё нормально.

Ответить

 

Алексей

Дмитрий, Динамические атрибуты - это про использование EAV Dynamic Attributes for Yii2 или свое решение, с привязкой к категориям?

Ответить

 

Дмитрий Елисеев

Свой EAV.

Ответить

 

Алексей

Здорово, Дмитрий, а целиком исходники доступны уже сейчас от всего проекта?

Ответить

 

Дмитрий Елисеев

От всего.

Ответить

 

ilma55 – zawebis.com

Дим, здравствуйте.

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

Ответить

 

Дмитрий Елисеев

Следующие по Laravel и Symfony. А по Yii2 повторный будет нескоро. Так что если спешите, то купите записи.

Ответить

 

Yaro Det

Очень крутые новости! А когда планируете интенсивы по Laravel и Symfony?

Ответить

 

Дмитрий Елисеев

Осенью и зимой.

Ответить

 

Entery

Дмитрий здравствуйте, есть просьба-предложение. Ваш курс по yii интересен, но хотелось бы увидеть результат. Понимаю что исходники вы не покажете, но хотя бы залейте получившийся интернет магазин на хостинг. Что бы оценить функционал

Ответить

 

Дмитрий Елисеев

Исходники есть на GitHub.

Ответить

 

Дмитрий Бухтяк

Здравствуйте.

В коде интернет магазина реализовано тремя способами чтение из БД:

1. Есть readRepository классы (как правило во фронтэнде и api)
2. Есть search методы в коде классов форм (как правило в бэкэнде)
3. Есть просто repository классы, которые иногда содержат несколько запросов на чтение.

Объясните пожалуйста, по какому принципу происходит это деление и какая цель преследуется в каждом из случаев?

Спасибо.

Ответить

 

Дмитрий Елисеев

Для юзкейсов с логикой в ядре сделаны доменные Repository.

Для админки оставлены неповторяющиеся стандартные формы с search() и ActiveRecord. Они кроме админки никому не нужны и их пока нет смысла выносить.

Для повторяющихся выборок фронта и API общий код вынесен в ReadRepository. Там уже могут быть нужны сложные JOIN-ы, ElasticSearch, asArray(), кеширование и подобные вещи.

Ответить

 

Дмитрий Бухтяк

Спасибо. Меня очень вдохновил подход в реализации магазина. Перенимаю терерь опыт в свой проэкт)

Хотел еще спросить в контексте реализации событий.

У меня стоит такая задача. Выводится созданная сущность, например post. В интерфейсе без кнопки submit на onchange изменяются аттрибуты этой сущности: category, status, project. Запросы обрабатывает rest api.

Каждое изменение такого аттрибута должно порождать событие, которое шлёт имейл о том что поменялось (например статус был xxx стал yyy). Однако это влечет за собой артефакт: 5 случайных кликов в интерфейсе - 5 имейлов. Чтобы это избежать, нужно чтобы имейл отправлялся спустя минуту после клика (пачки кликов кликов), при этом по условию, что изменяемый аттрибут действительно после пачки кликов приобрел новое значение, а не вернулся в первоначальное.

Вопрос в том, как бы Вы реализовали такое вот замысловатое отложенное событие с оглядкой на тот подход к событиям, который реализован в интернет магазине?

Спасибо.

Ответить

 

Дмитрий Елисеев

Первым делом бы передавал старый статус:

new StatusChanged($this, $oldStatus);

чтобы понимать из первого события, каким он был в начале серии.

Потом на принимающей стороне по Cron достаём всю группу этих сохранённых событий и сравниваем первое и последнее.

Ответить

 

Дмитрий Бухтяк

А каким образом и в какой момент сохранять эти события?

Ответить

 

Дмитрий Елисеев

Например, в своём QueueEventDispatcher по get_class($event) именно эти события дублировать в отдельную очередь и доставать всё из неё вручную по Cron.

Ответить

 

Дмитрий Бухтяк

А такой вариант не будет извратом?

Ложить события в БД с неким статусом new, с текущим значением аттрибута и с текущей датой. Если перед вставкой запись в статусе new уже есть, то просто обновить дату на текущую, если нет, то вставить новую.

Крон каждую минуту запускается и выгребает записи new с просроченной датой. Если значение аттрибута в сохраненном событии отличается от значения которое сейчас у соответствующей сущности в БД, то отправить мыло и статус изменить на done. Если не отличается, значит ставим статус ignored и мыло не шлем.

Ответить

 

Дмитрий Елисеев

Ну да. Можно.

Ответить

 

Дмитрий Бухтяк

Спасибо.

Подскажите еще такой вопрос.

Для чего mailer подключается во всех классы через контейнер зависимостей? В чем профит относительно вызова повсюду Yii::$app->mailer ?

Ответить

 

Дмитрий Елисеев

- Для однообразия подключения со своими сервисами, у которых нет Yii::$app->xxx
- Для упрощения подмены при тестировании
- Для возможности использования нескольких мейлеров без переписывания сервисов

Ответить

 

Дмитрий Бухтяк

Решил запустить проэкт. Всё поднялось, однако сами урлы не работают. В логах nginx пусто, словно запрос он не получает. hosts содержит записи, ping хостов идет, telnet заходит на 80й порт. Не могу понять что происходит и что за редирект на https... Поведение одинаковое во всех имеющихся на компе браузерах.

Ответить

 

Дмитрий Елисеев

Google зарегистрировал зону .dev и сделал принудительно доступной только по https. Вместо shop.dev переименуйте сайт в shop.test.

Ответить

 

Дмитрий Бухтяк

Спасибо.

Архитектурный вопрос.

имею форму настроек:

class UsersSettingsForm extends Model
{
	const SUBMIT_KEY_ENTER = 'enter';
	const SUBMIT_KEY_CTRL_ENTER = 'ctrl+enter';

	public $hide_inactive_users;
	public $hide_inactive_projects;
	public $submit_key;

	public function __construct(UsersSettings $usersSettings, $config = [])
	{
		if ($usersSettings) {
			$this->hide_inactive_users = $usersSettings->hide_inactive_users;
			$this->hide_inactive_projects = $usersSettings->hide_inactive_projects;
			$this->submit_key = $usersSettings->submit_key;
		}
		parent::__construct($config);
	}

	public function rules()
	{
		return [
			[['hide_inactive_users', 'hide_inactive_projects'], Type::className(), 'type' => 'boolean'],
			[['submit_key'], Type::className(), 'type' => 'string'],
			[['submit_key'], 'in', 'range' => [self::SUBMIT_KEY_ENTER, self::SUBMIT_KEY_CTRL_ENTER]],
			[['submit_key'], 'string', 'length' => [0, 256]],
		];
	}
}

имею useCase который сохраняет настройки юзера:

class UsersSettingsService
{
	private $userSettings;

	public function __construct(UserSettingsRepository $userSettings)
	{
		$this->userSettings = $userSettings;
	}

	public function edit($id, UsersSettingsForm $form)
	{
		$userSettings = $this->userSettings->get($id);
		$userSettings->edit(
			$form->hide_inactive_users,
			$form->hide_inactive_projects,
			$form->submit_key
		);
		$this->userSettings->save($userSettings);
	}
}

имею entity которая выполняет set аттрибутов:

class UsersSettings extends ActiveRecord
{
	public static function create($id_company)
	{
		$usersSettings = new static();
		$usersSettings->id_company = $id_company;

		$usersSettings->hide_inactive_users = 1;
		$usersSettings->hide_inactive_projects = 1;
		$usersSettings->submit_key = 'enter';

		return $usersSettings;
	}

	public function edit(
		$hideInactiveUsers,
		$hideInactiveProjects,
		$submitKey
	) {
		$this->hide_inactive_users = $hideInactiveUsers;
		$this->hide_inactive_projects = $hideInactiveProjects;
		$this->submit_key = $submitKey;
	}
}

Если возникнет необходимость добавить еще 10-20 настроек, то получится что у меня добавление будет сопровождаться прописыванием новой настройки в нескольких местах, и плюс метод edit() сущности entity AR будет иметь 10-20 параметров в аргументе.

Есть ли пути оптимизации, или оставлять текущее решение и добавлять каждую в нескольких местах и это будет более правильно?

Ответить

 

Дмитрий Елисеев

Настройки можно менять и независимо друг от друга. так что можно обойтись массовым присваиванием без метода edit:

public function __construct(UsersSettings $usersSettings, $config = [])
{
    $this->setAttributes($usersSettings->getAttributes());
    parent::__construct($config);
}
$userSettings->setAttributes($form->getAttributes(), false);
Ответить

 

Семен

Не подскажите:
1) Почему диспатчинг - $this->dispatcher->dispatchAll - вы убрали в репозитории. Вроде по логике слоев там ему не место. Да и теоретически если в сервисе транзакция не завершится, а события уже отработали

2) По вашему видео не ясен момент, вы что модели форм относите к M слою - Модели предметной области.? На втором уроке, на 50-й минуте где вы все Mодели в кучку сгруппировали:

Модель предметной области M
Модель данных из таблицы
Модель формы, модель ввода

Ответить

 

Дмитрий Елисеев

1) Там диспетчер умеет накапливать события при включении транзакции.

2) Это просто перечисление разных значений общего термина "Модель".

Ответить

Оставить комментарий

Войти | Завести аккаунт | Войти через


(никто не увидит)





Можно использовать теги <p> <ul> <li> <b> <i> <a> <pre>