Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (2)

Лучшие ответы пользователя

Все ответы (8)
  • Как кэшировать данные выполнения sql запроса в symfony 4 + doctrine?

    @dosim86
    Можете предварительно настроить кеширование в Symfony для Doctrine:
    framework:
        cache:
            pools:
                doctrine.result_cache_pool:
                    adapter: cache.app
    services:
        doctrine.result_cache_provider:
            class: Symfony\Component\Cache\DoctrineProvider
            public: false
            arguments:
            - '@doctrine.result_cache_pool'
    doctrine:
        orm:
            result_cache_driver:
                type: service
                id: doctrine.result_cache_provider

    По умолчанию Symfony использует файловое кеширование для пользовательских данных, поэтому результаты запроса Doctrine также будут хранится в файле. Однако если, например используете Redis, то можно его указать в качестве хранилища кешей по умолчанию:
    framework:
        cache:
            # Redis
            app: cache.adapter.redis
            default_redis_provider: '%env(REDIS_URL)%'

    Далее в нужных запросах просто указывайте Doctrine-е, что результат запроса надо кешировать:
    ...
    ->getQuery()
    ->useResultCache(true) // кешировать результат данного запроса
    //->setResultCacheLifetime(3600) // время жизни кеша при необходимости
    ->getResult()
    Ответ написан
    Комментировать
  • SessionInterface или TokenStorageInterface для проверки аутентификации?

    @dosim86
    В Symfony пользователь по умолчанию всегда аутентифицирован как анонимный и имеет токен AnonymousToken от TokenInterface, поэтому проверки наподобие $token->isAuthenticated() не имеет смысла, если нужно узнать аутентифицирован ли пользователь.

    Таким образом, чтобы получить "действительно аутентифицированного пользователя" нужно проверять его через механизм авторизации, например:
    if (!$this->security->isGranted('IS_AUTHENTICATED_ANONYMOUSLY')) {
      // success
    }


    Symfony четко различает понятия аутентификации и авторизации, т.е. аутентификацию получают, а авторизацию проходят. Аутентификация работает только один раз в самом начале запроса для получения пользователя (точнее токена). Авторизация работает постоянно до конца жизненного цикла запроса и разрешает/запрещает то или иное действие в системе.

    IS_AUTHENTICATED_ANONYMOUSLY является полномочией и относится к авторизации, а не к аутентификации, хотя название вводит в заблуждение, но тем не менее надо заметить, что слово ...AUTHENTICATED... написано в прошедшем времени. Также проверка роли относится к авторизации и это значит, что IS_AUTHENTICATED_ANONYMOUSLY на самом деле является встроенной ролю в Symfony
    Ответ написан
    Комментировать