Задать вопрос
  • Список типичных уязвимостей?

    @nicandr
    Да есть, называется OWASP, там есть описание уязвимостей, также как их предотвратить, и каждый год там публикуют топ 10 уязвимостей
    Ответ написан
    Комментировать
  • Multi-tenant архитектура на Symfony 4?

    @nicandr
    Если я вас правильно понял то вам нужно много подключений к разным базам данных, для этого есть Multiple Entity Managers
    doc https://symfony.com/doc/current/doctrine/multiple_...
    Так же вы в консоли можете указать куда заливать базу данных:
    bin/console doctrine:database:create --em='ваше_название_подключения'
    и оно зальет базу по этому подключению.
    Ну или посмотрите в хелпере как там указать название для connection bin/console doctrine:database:create --help
    Вам только остается по роуту определить какое подключение(connection) использовать. Это можно сделать например в event ну или как то еще, зависит от ващей логики.
    Ответ написан
    Комментировать
  • Взаимодействие нескольких репозиториев. Как объединить?

    @nicandr
    Максим Федоров правильно вам написал, вам нужен еще один слой который будет взаимодействовать с вашими репозиториями, в симфони как и в лбдом другом фреимворке вся логика должна быть в сервисе. Из вашего описания вы сделали facade паттерн чтобы в клиентском коде все бьло просто. Для этого подойдет сервис, который может который так же модет наследовать(implement) интерфейс.

    interface CategoryRepositoryInterface
    {
         public function findOne($id);
         public function findAll(): array;
         public function save(CategoryInterface $category);
         public function remove(CategoryInterface $category);
    }
    class CustomNameOfClass implements CategoryRepositoryInterface // ну тут имя лучше изменить
    {
          public function findOne($id){};  // тут тоже лучше иметь return type
         public function findAll(){}: array;
         public function save(CategoryInterface $category){}; // тут тоже лучше иметь return type
         public function remove(CategoryInterface $category){}; // тут тоже лучше иметь return type
    }

    Так будет тоже самое что и сейчас у вас, только репозитории работают отдельно, и сервис слой их обьеденяет с вашей логикой. Репозитории не должны знать о существовании других репозиториев.
    Поскльку у вас несколько репозиториев, создайте DTO и все данные после того как они преобразованы киньте в DTO, так у вас бьудет один стандартный обьект, над которым вы сможете выполнять дальнейшую логику.
    Ответ написан
    Комментировать
  • Сайт игнорирует изменение файлов? Кэш не очищается?

    @nicandr
    Чтобы застваить брайзер загрузить новый изменный js скрипт к его названию нужно добаить ?v=2 или v2, нужно изменить название. uberscript.js?v=2 для следующей версии uberscript.js?v=3 примерно так.
    Есть сборшики которые это делают (WebPack, Gulp) автоматически, они добавляют хэш в название.
    Ответ написан
    1 комментарий
  • Какие стандарты безопасности обязательны для сайта?

    @nicandr
    Согласно сайту OWASP, на первом месте все еще SQL Injection.
    doc: https://www.owasp.org/index.php/Top_10-2017_Top_10
    Конкретно для симфони, если используете свои кастомные формы, которые не от симфони, нужно добавлять CSRF токен. Также нужно так же быть бдительным с SQL запросами с конкатенацией(конкатенацию лучше не ипсользовать вообще, и использовать prepared statements), если используете ee c native sql. Также у симфони есть команда php bin/console security:check, которая проверяет на известные уязвимости в зависимостях.
    Ответ написан
    1 комментарий
  • Как проверить на дубль в Symfony 4?

    @nicandr
    Здравствуйте, используйте Unique entity @UniqueEntity(fields={"email"}, message="Exist")

    https://symfony.com/doc/current/reference/constrai...
    Ответ написан
    Комментировать