• Как выбрать данные из таблицы для которой не создан класс ORM в symphony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    DBAL, NativeSQL
    Ответ написан
    Комментировать
  • DQL запрос в symfony (связь много ко многим)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А как получить список акций, которых нет у заданного пользователя?


    Перефразируя. Вам нужен список акций всех пользователей кроме конкретного, нет?

    SELECT s.stockname FROM Stocker\StockBundle\Entity\Userstock s
    WHERE s.user != :user


    где :user это id юзера.

    Вообще такая штука. Если вы хотите оперировать SQL и т.д. то оперируйте. Напишите свой native query и т.д. А еще лучше - откажитесь от доктрины. Она хороша тогда, когда вы погружаетесь в предметную область и больше тратите время не на SQL/базы данные а на грамотное выстраивание взаимоотношений ваших сущностей.

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

    p.s. StockBundle это плохая идея. По сути если у вас есть что-то типа CoreBundle (общий бандл) - то вы уже проиграли в плане разделения логики на "отдельные части". Границы проведены неверно.
    Ответ написан
  • MVC как правильно, объясните некоторые моменты?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    контроллер - прослойка между View (HTTP, а не шаблоны как думают многие разработчики), и Приложением (моделью). Потому то они и тонкие что они занимаются исключительно конвертацией представления данных модели в предаставление клиента (не обязательно человека, а например клиентом может выступать браузер или другая программа).

    Пример экшена контроллера из моего проекта:

    public function registerUserAction(RegisterUserRequest $request, RegisterUserHandler $handler)
    {
        $user = $handler($request);
    
        return $this->resource($user, UserTransformer::class)->withStatusCode(201);
    }


    В итоге `RegisterUserHandler`, в моем случае "модель" системы, или реалиация конкретного действия этой системы, ничегошеньки не знает об интерфейсе. А интерфейсу плевать как оно там что внутри делается.

    Вот и вся соль.

    Рекомендую вам пока отложить изучение MVC, поскольку к web оно имеет относительно никакого отношения, важна лишь идея разделения обязанностей, снижения связанности и т.д.

    Почитайте про GRASP и SOLID. В GRASP описана идея контроллера очень хорошо.
    Ответ написан
    4 комментария
  • Базы данный какой тип поля выбрать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    int(round(time.time() * 1000))

    Как-то это непохоже на милисекунды)

    https://www.postgresql.org/docs/9.1/static/datatyp...

    смотрите табличку и выбирайте.
    Ответ написан
  • Как правильно добавить метаданные к сущности Symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вариант первый (тупой) - docs.doctrine-project.org/projects/doctrine-orm/en...

    Вариант второй (чуть более сложный и возможно более правильный) - страницы, категории и т.д. ничего не знают о метаданных. Метаданных знают за каким ресурсом они закреплены (урл, идентификатор сущности + сущность) и т.д. Мэпится все это сервисами и т.д. Так как нам в любой момент времени нужно всегда только один набор метаданных - нагрузку это не добавит, а вы сможете расширять это дело как хотите, и все изменения относящиеся к метаданным будут изолированы.
    Ответ написан
    5 комментариев
  • Как в Zend Framework 2 реализовать динамическое добавление связанных моделей?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    давайте думать. Нужно ли странице знать о своих тегах? Да, было бы прикольно но только что делать если теги нужно будет добавлять еще чему-нибудь? Или например кейсы когда какие-то теги надо создать а какие-то просто подключить.

    Так вот, убираем связь тегов из Page и оставляем однонаправленную ассоциацию на страницы у тегов. Теги нам делает какой-нибудь сервис (Tagger) с методами аля assignTags($page, $tags) и getTagsOf($page)

    Да, это суть сложнее зато можно спокойно реюзать в будущем, это проще поддерживать и вообще кошерно.
    Ответ написан
  • Почему PHP не видит класс через namespace?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Просто так все не происходит, особенно если у вас два класса из разных пространст имен лежат рядом.

    Гуглить про автозагрузку классов. Функции spl_autoload_register и в принципе почитайте про composer-вский автозагрузчик.
    Ответ написан
    2 комментария
  • Какие преимущества и недостатки у sqlLite и webSql?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    WebSQL по сути строится на базе sqlite. Отдельные плагины вроде этого нужны для совместимости между платформами. В частности поддержка windows девайсов.
    Ответ написан
    Комментировать
  • Проект со сложной логикой на Symfony – как проектировать? Примеры?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как их организуете (их тогда будут сотни)?


    Раскидываю по неймспейсам. Скажем все действия относящиеся к юзерам находятся в папке Users.

    Только вы учитывайте что CQRS это прикольно но особо не нужно. К примеру это сразу подразумевает что вы используете UUID вместо автоинкрементов и прочей чуши. Можете сделать хотя бы как Дядя Боб предлагает в своей Clean Architecture. Просто сервис на каждое действие.

    Есть ли смысл выносить каждую доменную модель в модуль/микросервис


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

    Раньше для дополнительных действий мне достаточно было использовать что-то вроде beforeUpdate/afterCreate модели.


    ну а сейчас вы будете эти вещи в сервисы пихать. Причем возможно не в один сервис. Вообще старайтесь не делать "хуков" и не будет с ними проблем. Есть к примеру DomainEvents такая штука, ну и можно все эти "дополнительные действия" в хэндлерах команд делать.

    Как не превратить кидание/получение событий типа PostBeforeEdit/PostBeforeEditHandler в "callback hell"?


    Просто забудьте об этих ивентах.

    ACL. Где храните указанную логику?


    Есть в симфони security vouters, а дальше все зависит от того что вы делаете.

    Как вы версионируете подобные проекты? А если нужна "N-1" рабочая версия на продакшене?


    git + docker теги в мастере. Ветки нужно плодить только тогда, когда у вас система деплоится кастомерам и нужно поддерживать сразу кучу версий. Называется это gitflow.

    На какие проекты (точнее, на код) можете посоветовать посмотреть для лучшего понимания? Ссылки на репозитории?

    На гитхабе катострофически мало примеров хороших приложений на симфони. Да и не только на симфони - в принципе найти в открытом доступе сложный проект - это нереально. NDA и все такое. Такие системы обычно очень дорогие и закрытые со всех сторон.

    p.s. почитайте книжки:

    - Эрик Эванс - Предметно ориентированное проектирование
    - Крэйг Ларман - Применение UML 2.0

    p.p.s. Все ваши загоны не имеют никакого смысла если вы не будете пользоваться практиками вроде Test-Driven-Development, ну или хотя бы покрывать систему интеграционными тестами. Без этого вы не сможете делать частный мелкий рефакторинг, а без этого ваша система быстро превратится в легаси.
    Ответ написан
  • Как организовать фабрику?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Может ну его? Реально? Попробуйте прочитать этот код кому-нибудь, он же не читается. Понятия не имею почему вы решили назвать репозиторий для продукта CatalogProductRepository. Или зачем вам фабрика. Ну и еще - зачем вы инстанцируете все руками. И что это за true.

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

    Я предлагаю вам вооружиться DependencyInjection. Реализация оного есть в любом уважающем себя фреймворке. И избавьтесь от непонятных и неявных констант.

    Моя "идея" заключалась лишь в использовании декоратора для реализации логики кеширования. Суть идеи простая - что бы добавить кеширование не нужно ничего править ни в логике использующую репозиторий, ни в самом репозитории.
    Ответ написан
  • Как сделать удаления переписки?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ответ как бы напрашивается - не удалять а прятать для конкретных юзеров.
    Ответ написан
    2 комментария
  • Какой программой для дефрагментации диска вы пользуетесь и как часто?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    SSD - дефрагментация отключена и не нужна.
    Ответ написан
    Комментировать
  • Построение приложения frontend, что выбрать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Возьмите Angular 1.5. Он значительно проще зоопарка из React, на нем так же можно делать все компонентами (не ну можно и как в Angular 1.0 клепать жирные контроллеры но это ничего кроме боли не приносит), полно учебных материалов (опять же из недостатков тут - адекватность материалов, большинство ориентировано на подходы, которые были адекватны в 12-ом году) и при этом переход на angular2 будет потом не таким болезненным.

    Что до typescript - он не очень сильно отличается от javascript (если мы говорим про ES2017 stage1 какой а не ES5.1).

    В целом angular2 имеет смысл использовать для реально больших приложений. Для маленьких будет довольно приличный оверхэд, да и наличие маленьких самодостаточных библиотек для построения приложений на сегодняшний день спасает.
    Ответ написан
    Комментировать
  • Построить архитектуру классов в Ruby программе?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    перестаньте мыслить классами и все станет куда проще. На основе вашего списка выделите объекты, которые будут фигурировать в игре. Это будет:

    - Клетка поля. У нее есть прямая связь с каждой из соседей и она знает есть на ней мина или нет. Так же для упрощения мы можем запихнуть в нее состояние мины (взорволась, обезврежена, необнаружена).
    - Управляющая логика тоже должна где-то находиться. Назовем эту логику - контроллер. При указании координат клетки на поле, которую мы хотим нажать, мы должны отправлять этой клетке сообщение. Эта клетка уже в случае чего попросит соседние и так пойдет цепная реакция. В итоге все обязанности будут просто отслеживаться.
    - Логика отображения. То есть что-то что берет текущее состояние игрового поля и будет заниматься его отображением на экран.
    Ответ написан
    Комментировать
  • Внедрение WEB API в проект MVC?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Имеется проект MVC


    Если у вас имеется проект MVC то у вас не должно быть никаких проблем. Просто добавляем еще пачку контроллеров которые будут формировать View и просить модель что-то сделать. Модель в этом плане это не "запись в базе" а именно какая-то логика которая должна эти CRUD операции произвести.

    Другое дело что MVC у ВАС может означать "ну я там в контроллеры логику запихнул и у меня просто шаблонизатор есть еще..."
    Ответ написан
    Комментировать
  • Есть ли инструменты для синхронизации локальной БД и удаленной на хостинге?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вам нужны миграции
    Ответ написан
    Комментировать
  • Что такое CORS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Cross-Origin.... это значит "между хостами". То есть вы делаете запросы с "localhost:3000" на "localhost:8080" или с "example.com" на "google.com", или с "example.com" на "api.example.com".

    Resource - тобишь ресурсы. Можете почитать что это такое в контексте REST или HTTP или URI.

    Sharing - ну тут я думаю тоже должно быть понятно. "обмен". То есть это правила которые определяют "можно ли чуваку получить доступ к этому ресурсу".

    Нужна эта штука для того что бы говорить "разрешает ли сервак запросы с этого орижина на этот ресурс".
    Ответ написан
    1 комментарий
  • Как исправить ошибку при установке пакета в composer?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    illuminate/filesystem v5.1.6 requires symfony/finder 2.7.*


    вот и весь ответ. Конфликт версий зависимостей.
    Ответ написан
    Комментировать