2016-02-16 4 views
0

Я пытался реализовать аудит безопасности в контроллерах в symfony3. Требования, аналогичные EntityAudit в https://github.com/simplethings/EntityAuditКонтрольные контроллеры Symfony3

Страница с иллюстрациями: /{_locale}/introduction.{_format} страница имеет доступ, чтобы сохранить в таблице базы данных следующую информацию. a. местонахождение b. запрошенный формат c. является анонимным запросом или авторизованным как d. время запроса

В то же время таблица «счетчик» увеличивает запрос «счетчик посещений» контроллера.

Какова была бы лучшая практика, всего нескольких строк кода или справочных документов было бы достаточно.

ответ

0

Я бы предпочел использовать EventListener было бы меньше места.

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

Таким образом, вы можете добавить слушателя к своему services.yml следующим образом.

acme.demo.listener.your_listener: 
    class: Acme\DemoBundle\EventListener\YourListener 
    tags: 
     - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } 

См. Более подробную информацию. http://symfony.com/doc/current/cookbook/event_dispatcher/event_listener.html

Используйте следующие ли пользователь анонимным или авторизованный пользователь:

Symfony\Component\Security\Core\Authentication\Token\AnonymousToken; и

Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; 

Вы можете получить локаль из запроса событий

Symfony\Component\HttpKernel\Event\GetResponseEvent; 

Для формата есть метод getRequestFormat() на Объект запроса GetResponseEvent. RequestTime - это только new \DateTime()

Итак, все будет хорошо.