Ответы пользователя по тегу Symfony
  • Какая сущность в symfony security и Lexik JWT Bundle проверяет логин/пароль при входе?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Зачем вам разбираться, как работает сложный бандл. Вам нужно разобраться как это сделать минимальными усилиями. Могу лишь подсказать как это сделать. Потому что описывать как работает бандл долго и ни к чему.

    1. Делаете новый роут и в нем проверяете входящие данные. Если это логин и код из смс, то ищете эту связку в базе и если нашлась, то формируете JWT и отдаете frontend приложению.
    2. Делаете Аутентификатор, который берет заголовок токена из запроса, извлекает из него токен и проверяет его на различную валидацию: подпись, срок действия и т д

    Ну а дальше если есть вопросы можете написать их в комментариях.
    Ответ написан
    2 комментария
  • Как синхронизируются данные из контейнера на хост и обратно в symfony-docker?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Не очень понимаю в чём вопрос) Том Docker – это каталог (или коллекция файлов), который находится в файловой системе хоста и не является частью UFS контейнера. Именно внутри этих томов контейнеры способны сохранять свои данные. С помощью команды docker volume вы можете легко управлять томами. Соотвественно куда вы прокините том - там и будут жить ваши данные на машине.
    Ответ написан
    Комментировать
  • Почему Symfony 6.2 не создает entity?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Там где mappings сущностей замените тип аннотация на атрибут. type: annotation -> type: attribute

    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App
                type: attribute <— ТУТ
    Ответ написан
    Комментировать
  • Как вставить данные в БД из ajax?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Вы сначала изучите Фреймворк. Сходите в документацию, прежде чем писать такой код. Например, зачем использовать такие конструкции $_POST['pages']; Так же для отладки используется не контроллер, а провайдер. И функции dump. Для симфони, как и для других это всё давно продумано.
    Ответ написан
    2 комментария
  • Что именно означает lazy в настройках SecurityBundle?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Ленивый анонимный режим предотвращает запуск сеанса, если нет необходимости в авторизации (т.е. явной проверке привилегий пользователя). Это важно для обеспечения возможности кэширования запросов (см. HTTP-кэш).

    https://symfony.com/doc/current/security/.html#the...
    Ответ написан
    2 комментария
  • Как избавиться от try-catch в контроллерах?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Смотря для чего вы делаете эти try catch. Это не всегда повторяемость иногда действительно нужна, например, чтобы перебросить своё исключение. Пойти можно разными способами. Но а простой - это вам нужно просто их убрать и сделать Listener или Subscriber, который будет обрабатывать ошибки и отдавать их в нужном формате в api. Если правильно понял для чего нужно. Пример.
    Ответ написан
    1 комментарий
  • Где должен регистрироваться сеанс, когда аноним заходит на сайт?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    1. Не мыслите таблицами - ничего хорошего не выйдет
    2. Хранить можно также в NoSQL, что даже лучше. Например, redis.
    Ответ написан
    1 комментарий
  • Почему я не могу выполнить миграцию, где есть строка ..?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    В ошибке всё написано. Используется foreign key. Если хотите сделать манипуляцию с этой колонкой нужно удалить FK, а затем снова добавить, если он нужен.
    Ответ написан
  • Как отфильтровать по пользователю все запросы?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Почему бессмысленно? Не бессмысленно. Контроллеры могут быть разными: API, Console. Web… везде может быть разная фильтрация. Поэтому, это точно не бессмысленно.

    По поводу логики - это правильно. В контроллере она быть не должна! Для этого создайте свой сервис фильтрации. Передавайте в него Query Builder и фильтруйте как нужно и где нужно.

    Подробнее можно почитать на примере EasyAdmin https://symfony.com/bundles/EasyAdminBundle/curren... или на Laravel пример для понимания https://habr.com/ru/post/485520/

    Пример на Laravel только для понимания, как это можно осуществить.
    Ответ написан
    2 комментария
  • Как правильно использовать вложенные бандлы?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Вопрос в заголовке про использование, а внутри про объединение…)

    Без кода сказать сложно что куда лучше перенести. Расширять один бандл тоже можно по-разному, где-то просто скопировать класс из одного и перенести в другой, затем подменить в DI контейнере, где-то влезть через события, а где-то решить вопрос наследованием.

    Если речь идёт о бандле, то по всем правилам это, вероятно, какая-то публичная библиотека. Так как в своём приложении не имеет смысла делать бандлы. Поэтому, как мне кажется, стоит сделать форк данной библиотеки, перенести все нужные зависимости из А в Б, подключить библиотеку из этого форка.

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

    Переносить из Б в А не вижу смысла, так как кода явно будет больше, раз Б работает самостоятельно, а А от него зависит.

    Также не вижу ничего плохого в том, что один бандл будет зависеть от другого. Вполне бандл А может жить и без объединения с бандлом Б. Главное следите за обновлением зависимостей.
    Ответ написан
    7 комментариев
  • Как делать интеграционные тесты в бандле symfony?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    В этой статье https://habr.com/ru/post/500044/ подробно рассказывается как тестировать бандл. Там же есть ссылки на создание бандла и его публикацию.
    Ответ написан
    Комментировать
  • Есть ли возможность создать migration per entity?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Миграция не группируется по изменению сущности. Единственный вариант - это разделить миграции по папкам(модулям), чтобы миграции одной сущности попадали в папку и свою таблицу вместо общей.

    Однако это требуется больше для модулей. Делать миграции под каждую сущность не вижу смысла. Задача миграций - следить за схемой данных и изменять её. Нет смысла здесь пытаться как-то одно отделить от другого. Никакой пользы это не даст.
    Ответ написан
    Комментировать
  • Как исправить ошибку в ElkarBackup?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Серверная ошибка. Смотрите логи или включайте debug панель.
    Ответ написан
  • Роутинг согласно пути файлам?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    config/routes/annotations.yaml
    api:
        resource: ../../src/Http/Controller/Api/
        prefix: /api
        name_prefix: api.
        trailing_slash_on_root: true
        type: annotation
        defaults:
            _format: json
    Ответ написан
    4 комментария
  • Как деплоить структуру БД?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Вся работа со структурой базы данных в Symfony осуществляется через Dortrine Migrations Bundle. Чтобы создать структуру данных вам нужно:
    1. Настроить маппинг ваших сущностей.
    2. Сгенерировать миграции командой
    php bin/console doctrine:migrations:diff
    3. Применить созданные миграции командой
    php bin/console doctrine:migrations:migrate
    Ответ написан
    Комментировать
  • Что принципиально отличает Symfony 5 от Laravel 8?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    1. Прежде всего нужно понимать, что любой Framework, в руках хорошего разработчика будет жить долго и хорошо.
    2. Framework — это инфраструктура. Framework не предоставляет Вам готовый код и не задаёт архитектуру, он предоставляет Вам низкоуровневые инструменты или их быструю интеграцию, в которых нет необходимости писать с нуля под каждый проект. Хотя, ради практики, было бы не плохо попробовать это сделать, чтобы разобраться в данном вопросе, но сейчас не об этом. Исходя из этого Ваш код должен быть независим от какого-либо Фреймворка. Устарел Yii2 framework —поменяли контроллеры, немного инфраструктуры и код работает уже на Symfony или Laravel. Это касается не только Фреймворков, любая сторонняя библиотека должна быть изолирована от прямого использования. Это позволит Вам быть более гибче и сделает Ваш код менее связанным и зависимым.
    3. Оба Фреймворка популярны и имеют право на существование. У всех разный порог входа, разное сообщество и разные решения. На Symfony код пишется чуть сложнее и дольше, так как нет привычных фасадов. Многие компоненты и Фреймворки используют компоненты Symfony в виде своих обёрток. Однако, нужно понимать, что Фреймворк задаёт немного стиля в разработке, у Symfony этот стиль более правильный и строгий. Поэтому, использование Symfony интуитивно подталкивает Вас к написанию более чистого кода, без погружения в различные паттерны.
    4. Doctrine — это НЕ тот же Eloquent. Это совершенно разные вещи!
      Eloquent —это анти паттерн Active Record, а Doctrine это паттерн Data Mapper. Если речь идёт о быстрой разработке и не долгоживущем или небольшом проекте, то можно взять и её, однако на долгий срок лучше использовать Data Maper типа Doctrine, Cycle. При таком подходе ваши поля «не торчат» напрямую из базы данных в код. При изменении столбца в БД — его не придётся менять по всему проекту. Для Data Mapper подход — Code First (Вначале код), а для Active Record — Table Fist (Вначале таблицы). При использовании Data Mapper мы не думаем как будут храниться наши данные в БД, не думаем какая будет БД, что не скажешь по AR.

    Тема фреймворков на Q&A поднимается очень часто. Лично мне приходилось много раз отвечать на подобные вопросы. Вы можете сами в этом убедится по моим ответам:

    Поэтому, серьёзно к таким вопросам здесь не относятся. Чтобы понять разницу — Вам, очевидно, нужно попробовать оба Фреймворка в разных ситуациях. Со временем Вы сами всё поймете. А если Вас устраивает Laravel и не предвидится какого-то большого развития — пользуйтесь. Пару строк кода можно написать и без какого-либо Фреймворка. Главное — результат и правильно подобранный инструмент.
    Ответ написан
  • Как структурировать проект на Symfony по принципу package-by-feature?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Архитектура вообще не относится никак к фреймворку.

    Из примеров могу посоветовать пример проекта Дмитрия Елисеева на slim. И ещё есть доклад от Валентина Удальцова про архитектуру на Symfony.

    1. Kernel хранить в src, если он один.
    2. Миграции можно src/Data/Migration Или src/Migration
    3. Тесты, если общие (функциональные), то в /tests, а если unit, то в папку, где фича src/Feature/Test

    Из вашей структуры я бы вынес Console и Controllers в одну папку на уровне с Feature.

    Так же сервисы я бы тоже не делал всё в одном services.yaml, а выносил бы в config/services/feature.yaml Или в каждую фичу.
    Ответ написан
  • Можно ли как-то ограничить количество одновременных сессий для пользователя в Symfony 5?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Мне кажется, что тут не совсем вопрос про симфони, но тем не менее отвечу.

    Храните каждый сеанс пользователя в базе. Данные храните такие как ID пользователя, IP, user agent, тайм зону и т д. А в приложении проверяйте, если в пользователь зашёл с другого устройства (браузера), то говорите ему о том, что нужно завершить прошлый сеанс или этот сеанс будет автоматически удалён через 5 минут, если пользователь не будет продолжать этот сеанс.

    Думаю, что это самое простое решение.
    Ответ написан
    Комментировать
  • Как получить правильный параметр в Repository?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Неправильно подставляете ID ниже в контроллере/сервисе/репозитории.
    Ответ написан
    Комментировать
  • Где в Symfony prod записываются логи?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Смотрите вашу конфигурацию # config/packages/prod/monolog.yaml Возможно у вас там ничего нет, вот и никуда не пишется. А вообще почитайте документацию.
    Ответ написан
    Комментировать