Ответы пользователя по тегу Symfony
  • Как перенести сайт на Symfony?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Про адреса вам уже Александр N++ ответил.
    А для переноса базы в совершенно новую структуру пишете Symfony Console Command, которая импортирует данные из старой базы.
    Если схема не сильно отличается, можно попробовать миграцией переехать, но, скорее всего, проще именно с нуля спроектировать новую базу и переехать с помощью импортера из старой.
    Ответ написан
  • Как сделать, чтобы по событию в методе одного сервиса с передачей параметра запускался другой сервис?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Поизучал материалы в инете - жуть как вся эта тема описана и у каждого по-своему - не получилось собрать единую "картинку"

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

    Что мешает вызвать из сервиса A сервис B?
    Ключевое слово - ЗАПУСТИЛСЯ - типа как будто сам.

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

    Если вы вызовете событие, произойдёт ровно то же самое. Параллельное выполнение имеет мало общего с исключениями.
    Пока понял, что в методе текущего сервиса нужно прописать создание события, а запускающийся сервис будет являться слушателем или подписчиком - сервис надо так же превратить в слушателя. Обязательно ли создавать класс-слушатель и т.д.?

    Вам вообще по тому как вы описали события не обязательно использовать. Но если будете - нужно будет делать EventListener или EventSubscriber. Читайте документацию.

    А вообще, ВОЗМОЖНО, вам нужны очереди. То есть, можно посмотреть в сторону RabbitMQ, ZeroMQ и т.п. Суть будет такая:
    У вас есть сервер очередей и пул воркеров, которые постоянно опрашивают сервер очередей на предмет новых заданий.
    В вашем коде на PHP сервис отправляет сообщение серверу очередей с параметрами задания и продолжает делать свою работу. В это же время один из воркеров пула получает это задание и начинает его обрабатывать. Но это всё происходит не в рамках одной сессии приложения Symfony, а грубо говоря, работают два отдельных приложения, которые связаны через сервер очередей: ваше приложение на Symfony, которое отправляет задание в очередь и воркер(ы), которые обрабатывают очередь (вообще могут быть написаны на другом языке).
    Ответ написан
  • Почему Composer удаляет мои файлы?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Вполне возможно, что эти пакеты были не зависимостями вашего приложения, а его зависимостей. Если они вам нужны - надо указать их явно в корневом composer.json.
    Ответ написан
  • Будет ли влиять на производительность такой запрос?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    или нужно так
    $from = $book->getFromBook()->getAlias();
    вытаскивать значение сущности, а не саму сущность

    Если alias - это не поле, которое является Id (судя по вашему маппингу, это не так), то у вас будет всё равно вытащена вся сущность Book.
    Только в случае, если вы сделаете
    $book->getFromBook()->getId()
    У вас не будет запроса в БД.
    дальше $from я передаю параметром в другой репозиторий, чтобы осуществить другой поиск

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

    А вообще, вполне вероятно, что вы пытаетесь экономить на спичках. У вас сколько таких запросов будет на странице делаться?
    Ответ написан
    2 комментария
  • Как правильнее подтянуть форму на главную?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Best Practice
    Define your forms as PHP classes.

    https://symfony.com/doc/current/best_practices/for...

    Таким образом вы сможете использовать одну и ту же форму в разных местах выполняя DRY.
    Ответ написан
  • Объясните пожалуйста, как работает обновление записи в БД Symfony/Doctrine?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Если бы у нас передавалось две формы сразу, например Vendor и User, появился бы так же объект User и он бы автоматически присвоился переменной $user? Обычно, нужные данные я вытаскивал непосредственно из переменной $request и присваивал их "руками", куда мне нужно (хотя, такой вариант мне тоже безусловно нравится).

    ParamConverter ориентируется на тайпхинтинг в параметрах экшена и автоматически вытягивает вам нужную сущность из БД согласно параметрам маршрута.
    Здесь в первой строке идёт проверка на то, что форма заполнена, а дальше происходит какая-то магия не ясная мне. У нас нет никаких переменных, но делаем сброс буфера. Откуда Doctrine знает, что именно и куда нужно записать?

    Никакой магии. Изучайте как работает ORM типа Data Mapper. У вас есть Entity Manager, который "перзистит" (persist) определённые сущности. В данном случае у вас в него сущность попадает при обработке формы прозрачно (как бы за кадром) через так называемые DataTransformers.
    делаем сброс буфера

    В общем, посмотрите, что такое Flush относительно этой ORM. Например, тут.
    Ответ написан
    Комментировать
  • Symfony / Doctrine 2, как реализовать предварительную загрузку связей (одним запросом)?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Три варианта:
    - fetch=EAGER у связи (см. ответ @BoShurik)
    - setFetchMode() у запроса (см. ответ @BoShurik)
    - Указать конкретно JOIN в запросе

    Первый вариант, естественно, хорош только тогда, когда загружать коллекцию нужно ВСЕГДА.
    Ответ написан
    2 комментария
  • Symfony как сделать регистрозависимвый поиск с помощью entity manager?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Если вы не заметили, вы получаете у EntityManager объект репозитория, к которому и обращаетесь. Вам нужно репозиторий для вашей сущности расширить методом, который будет делать регистронезависимый поиск.
    Ответ написан
    Комментировать
  • Как правильно получить часть данных из отношения в Symfony?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Не касаясь того, насколько правильно у вас это с архитектурной точки зрения, могу сказать, что вы можете в методе getOwner() выбрать именно то, что вам нужно воспользовавшись фильтрацией по критерию в коллекции.
    Взять всех пользователей через аннотации и фильтровать на стороне пхп, сделать отдельный запрос без аннотаций или можно аннотациями как-то это сделать?

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

    Почитайте документацию по Doctrine ORM. В ней достаточно важных моментов, которые лучше узнать до начала работы, чтобы потом не переписывать всё, когда узнаете о них.
    Ответ написан
  • Есть ли возможность задать какие-нибудь данные в контроллере и получить их в комманде?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Возможно, вам нужны очереди (RabbitMQ/etc) или что-то типа Memcached/Redis.
    Ответ написан
    1 комментарий
  • Как избежать зацикливания при получении связанных сущностей через доктрину?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Во-первых, ваш search() бесполезен, так как такую выборку можно сделать стандартным методом репозитория - findBy() или магическим findById1c().
    Во-вторых, с чего вы взяли, что происходит какое-то зацикливание?Третий пункт не должен происходить, если вы, конечно, явно не указали с обеих сторон связи fetch="EAGER". Да и то Doctrine, вероятно, не допустила бы такой проблемы.
    Ответ написан
    2 комментария
  • Как использовать интерфейс в DI Symfony 3?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Можно. Вы что-то делаете не так. Код классов и интерфейса не приведёны, ошибка не приведена, конфиг контейнера не приведён - о чём разговор вообще?
    Ответ написан
    Комментировать
  • Как переопределить класс в симфони-проекте?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Боюсь что если бандл изначально не рассчитан на расширение объектов SearchHit и SearchHit там захардкоден как вы говорите, вам придётся переопределять полностью весь сервис, который их собирает ("сервис поиска").
    Ответ написан
    Комментировать
  • Как новичку правильно организовать мультиязычность Symfony2?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Translatable в Doctrine Extensions, например. Ставится бандлом DoctrineExtensionsBundle.
    Ответ написан
    6 комментариев
  • В каком месте необходимо передавать параметр в header "apikey" при авторизации по API?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Что именно непонятно? Вы в заголовке запроса передаёте секцию apikey так же как, скажем, секцию User-Agent, Accept и т.п.
    Почитайте что-нибудь про HTTP.
    Ответ написан
    4 комментария
  • Как в createQueryBuilder достать данные из ManyToMany?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Если вы достаёте не целую сущность, а только конкретные поля - очевидно, вам нужно делать JOIN и уже по алиасу, который вы назначите в JOIN обращаться ко полям связей.
    Ответ написан
    3 комментария
  • Как задать условие использования innerJoin в createQueryBuilder?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    В чём проблема-то?
    // За форматирование извиняюсь - писал всё вручную
    $qb = $this->createQueryBuilder('u')->select('...');
    if ($statuses) {
        $qb->innerJoin()
    }
    $all = $qb->getQuery()->getSingleScalarResult();

    Подучите PHP что ли.
    Ответ написан
    2 комментария
  • Нужно ли разбивать на отдельные бандлы?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Create only one bundle called AppBundle for your application logic.

    Из Symfony Best Practices - Creating The Project - Application Bundles.
    But a bundle is meant to be something that can be reused as a stand-alone piece of software. If UserBundle cannot be used "as is" in other Symfony apps, then it shouldn't be its own bundle. Moreover, if InvoiceBundle depends on ProductBundle, then there's no advantage to having two separate bundles.

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

    Я точно не знаю, насколько зависят одни части от других, но в вашем случае, возможно, лучше просто сделать иерархию директорий внутри бандла.
    Но все упирается в то, что необходимо тогда обращаться к сущностям в AppBundle, иначе можно насоздавать копий сущностей в разных бандлах одной таблицы(проблема с обновлением БД и повторение кода)

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

    А вы будете отключать функциональность так часто? И что не так с git?
    P.S. Возникает желание создать отдельный бандл для сущностей, к которой и прописать зависимость всех остальных бандлов

    В некоторых случаях так и делают. Например, у нас есть бандлы сущностей для разных внешних сервисов. Но они сделаны в виде отдельных бандлов, т.к. используются в нескольких проектах и на других проектах часть логики, которая с ними работает на основном, не нужна.
    Ответ написан
    1 комментарий
  • Sub-request или service?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Первый вариант вполне нормальный.
    Второй - довольно бессмысленный. Городить расширение для того, для чего оно не нужно.
    Третий - не очень хорош, т.к. в данном случае абсолютно левым контроллерам придётся что-то знать о заголовке, хотя они занимаются совсем другим.
    Четвёртый - тоже не лучшая мысль.
    Пятый - пожалуй, тоже.

    Я бы выбрал первый вариант, когда отдельный экшен занимается выводом данных для хидера или сайдбара.
    Ответ написан
    5 комментариев
  • Что за ошибка при реализации аутентификации через логин и email на Symfony3?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Похоже на то, что в качестве репозитория для вашей сущности Users выступает не zenaku\AppBundle\Entity\Repository\UsersRepository, а Doctrine\ORM\EntityRepository.
    Ответ написан
    Комментировать