Ответы пользователя по тегу Symfony
  • Объясните пожалуйста, как связать две сущности в разных бандлах на symfony2?

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

    В целом, то что вы привели просит вас указать в качестве связи (targetEntity) интерфейс или абстрактный класс, с которым вы хотите связать сущность, а в конфиге прописать мэппинг, какому интерфейсу соответствует какая реализация.
    Ответ написан
  • Symfony - Перестали работать сервисы, что делать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Обновил composer update и перестали работать сервисы

    интересно почему это... Смотрите как ваш сервис называется в том самом бандле в котором все это дело не работает и куда пропал сервис. Старайтесь в composer.json прописывать версию как можно точнее, что бы позволять обновляться только минорным релизам (никаких dev-master).
    Ответ написан
  • Каким еще способом можно внести изменения в сторонний бандл?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    относительно правильным будет отнаследоваться от модели предоставляемой FosUserBundle и просто в конструкторе вызывать этот метод.
    Ответ написан
  • Как использовать наследование Bundle для перезаписи частей bundle?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    касающиеся наследование бандлов.

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

    Само наследование достигается строчкой "return 'FOSUserBundle';"

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    У меня есть таблица:

    Не таблица, а сущность. Doctrine исповедует принцип persistence ignorance.

    Зачем так сложно то? Настраиваем каскадный персист для связи и наш код упрощается до:

    $notification = new FcsNotificationEA();
    // добавляем 3 аттачмента
    $notification->add(new Attachment());
    $notification->add(new Attachment());
    $notification->add(new Attachment());
    
    $this->notificationsRepository->add($notification); // внутри add происходит persist
    
    $this->get('doctrine.orm.entity_manager')->flush(); // коммитим изменения в базу
    
    return $this->render('some_template.twig', compact('notification'));


    p.s. все же подумайте о том что бы нормально именовать объекты... ибо не понятно что это такое.
    Ответ написан
  • Как правильно реализовать авторизацию symfony 2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что сие надо делать с помощью FOSUserBundle.

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

    Поля имя фамилия появились, а поле группы нет. почему?

    Потому что это поле опредено в базовом классе User из фос юзер бандла. Это хороший пример почему мне не нравится его использовать, я предпочитаю полный контроль за своими сущностями.

    При регистрации пользователя ему по умолчанию не присваивается никакой роли, группы и нельзя указать имя и фамилию

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

    как заменить стандартные шаблоны своими заранее сделанными.

    Читаем документацию к fos user bundle, там все это есть. Это одна из самых базовых нужд разработчика, так что, как понимаете, это можно сделать прописав в конфиге пути к шаблонам, которые вы хотите юзать.
    Ответ написан
    4 комментария
  • Как правильно связать Angularjs и Symfony2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вопрос как правильно подключить angularjs и использовать его в роли front-end.

    не подключать, пусть будет как отдельное приложение которое будет общаться с апишкой по HTTP (Restfull, JSON RPC, как хотите).
    Ответ написан
    Комментировать
  • Почему не работает код $em = $this->getDoctrine()->getManager();?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    debug, бряка, смотреть что есть $this.
    Ответ написан
    8 комментариев
  • JavaScript фреймворк для Symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Пробовал использовать Angular.js, но он синтаксисом конфликтует с twig-ом

    можно изменить синтаксис как в ангуляре (через $compileProvider) так и в симфони. Так же товаристч Mikhail Osher верно подметил. Ну и да, нечего хранить шаблоны ангуляра в шаблонах твига. Держите их отдельно, а данные можно через модуль-пустышку передавать.

    В целом же Angular лучше себя показывает в контексте SPA, когда на симфони у вас исключительно апишка (собственно я так и делаю). Правда с Angular2 уже можно спокойно жить. Еще как вариант, если вас интересует именно UI фреймворк, то как уже говорили выше - React или Polymer.
    Ответ написан
    Комментировать
  • В каком конфиге Symfony храниться настройки Doctrine?

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://getcomposer.org/doc/04-schema.md#autoload - смотрим секцию classmap, но вообще да, название файла и класса должны совпадать, так проще искать где что лежит.

    p.s. Кдассы-келперы - это плохо. Учитесь придумывать адекватные названия наполненные смыслом.
    Ответ написан
    Комментировать
  • Как правильно организовать поиск в Symfony2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ситуация выглядит как-то не очень обнадеживающе

    сфинкс популярнее в СНГ, эластика на западе, Yii популярен в СНГ, Symfony на западе... я как-то наблюдаю связь.

    https://github.com/FriendsOfSymfony/FOSElasticaBundle - 1262 коммита
    https://github.com/ongr-io/ElasticsearchBundle - 681 коммит

    Знаю что количество коммитов не решающий показатель, но при такой разнице...

    главное это совокупность звездочек, скачиваний и пульса проекта.

    Берите эластику.
    Ответ написан
    4 комментария
  • Существует ли соглашение о наименовании бандлов в Symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Именуйте их так, что бы вам или другому человеку было понятно что это и зачем. А еще лучше - старайтесь обходиться AppBundle-ом и выносите в бандлы только то, что можно реюзать.
    Ответ написан
    2 комментария
  • Doctrine: как получить исходное состояние поля ManyToMany Collection?

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

    Сами объекты в коллекции продолжайте сравнивать через getEntityChangeSet, а изменение коллекций обрабатываются отдельно.

    В целом трекинг изменений через доктрину это так себе идея, есть более удобные подходы вроде CQRS + Event Sourcing.
    Ответ написан
    Комментировать
  • Как в ОС UBUNTU инициировать работу контроллеров ( сервисов, отдельных php-скриптов или целых бандлов) Symfony2?

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    захешированный пароль

    никак, только брутфорсом коллизию можно подобрать, что в случае BCRYPT сильно долго будет.

    Что вам нужно сделать - запоминать исходных пороль до хэширования. И все. А лучше вообще как-то сделать так что бы не высылать его никуда.
    Ответ написан
  • Что такое "артефакт" в рамках Сontinuous Delivery PHP приложений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    артефакт это все то что генерируется в процессе сборки. В частности у меня в проектах где нет Docker, образ которого и является артефактом, а применяется старый добрый tar.gz это делается так:

    @echo Build artifacts
        tar --exclude=".git" \
            --exclude=".idea" \
            --exclude="*.iml" \
            --exclude=".vagrant" \
            --exclude="build" \
            --exclude="node_modules" \
            --exclude="devops" \
            --exclude="specs" \
            --exclude="app/cache" \
            --exclude="app/logs" \
            --exclude="parameters.yml" \
            --exclude="web/uploads" \
            --exclude="web/app_dev.php" \
            -zcf build/build.tgz .


    Еще артефакты могут включать дополнительные вещи:
    - результаты прогона тестов. полезно когда тесты фэйлятся что бы присылать на email разработчикам репорт
    - покрытие кода тестами, в виде xml или/и html
    - репорты статических анализаторов, вроде phpmd, phpcpd и т.д.
    Ответ написан
  • FOSRestBundle как заставит работать с symfony/serializer?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://github.com/FriendsOfSymfony/FOSRestBundle/...

    TL;DR

    группы сериализации symfony/serializer начал поддерживать только с версии 2.7, до этого только jms serializer умел это дело. Потому fosrest еще просто не умеет использовать symfony/serializer для этих целей. Увы но добавление полноценной поддержки symfony/serializer приведет к довольно грустным BC-break-ам и увидим мы поддержку оного полноценную только в FOSRestBundle 2.0.
    Ответ написан
    Комментировать
  • Есть ли объективные причины отказаться от аннотации?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Почему аннотации это плохо? Потому что аннотаций в PHP нет (во всяком случае пока). А то что есть - это кастыль основанный на phpdoc.

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

    Есть еще одно НО. Скажем я когда-то был категорически против использования аннотаций в сущностях доктрины. Представьте себе типичный проект на symfony. У нас есть какое-то поле и мы должны написать туда минимум аннотацию для доктрины и аннотацию для валидатора. Если мы пишем апишку то появляются всякие сериализаторы и прочая чушь, документация к API и тд. Ну и собственно сам phpdoc. В итоге на одно поле сущности выходят минимум 5 строк в phpdoc с аннотациями.

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

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) делаем адаптер PSR-7 (или HttpKernel) к вашему движку
    2) делаем приложеньку на симфони
    3) ставим мидлвэр который будет разруливать на какое приложение какие запросы кидать. Это можно разруливать и через nginx но как-то не круто.
    4) когда начинаем пилить функционал на симфони и нужно что-то реюзать из старой кодобазы, стараемся отделить то что мы хотим заюзать от старой инфраструктуры (можно скажем сервис-декоратор запилить для старого движка) и регистрируем его в DI
    5) постепенно переносим код, модель можно оставить старую если это возможно.

    По сути основная сложность отделить модель от инфраструктуры движка и почистить сервисный слой.
    Ответ написан
    Комментировать