Добрый день.
При входе на сайт, или при переходе на другую страницу, требуется автоматически выполнять какие-то действия. Например у меня сейчас имеется класс rc/Service/MenuPuller вида:
class MenuPuller extends AbstractController
{
const TOP_MENU = 1;
const DOWN_MENU = 2;
const DOWN_SIDEBAR_MENU = 3;
...
public function getMenu( $category )
{
...
В метод класса getMenu возвращает массив ссылок из которых и строится нужное меню. Использую так:
...
use App\Service\MenuPuller;
class DefaultController extends AbstractController
{
/**
* @Route("/", name="app_homepage")
*/
public function index( MenuPuller $menuPuller )
{
return $this->render('default/index.html.twig', [
'main_nav' => $menuPuller->getTopMenu(),
'footer_nav' => $menuPuller->getDownMenu(),
'footer_sidebar_nav' => $menuPuller->getDownSidebarMenu(),
'post' => $_GET
]);
}
}
Есть еще класс Autologin оформленный как сервис для автоматической авторизации:
...
class Autologin extends AbstractController
{
public static function autologin( String $email, Request $request, AbstractController $ac )
{
$dispatcher = new EventDispatcher();
$user = $ac->getDoctrine()->getManager()->getRepository("App\Entity\User")->findOneBy(['email' => $email ]);
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$ac->get('security.token_storage')->setToken($token);
$ac->get('session')->set('_security_main', serialize($token));
$event = new InteractiveLoginEvent($request, $token);
$dispatcher->dispatch($event);
}
}
...
// Где-то в коде вызывается так:
// вместо "user2@mail.ru" будет глобальная переменная, здесь просто для примера.
public function dashboardAction()
{
Autologin::autologin( "user2@mail.ru", $request, $this );
...
public function indexAction(Request $request)
{
Autologin::autologin( "user2@mail.ru", $request, $this );
...
Т.е. проверку нужно проводить в нескольких местах, так как неизвестно, с на какую именно страницу пользователь зайдет.
Если страниц немного, то, IMHO, такой подход имеет право на существование, но страниц будет много, помимо этих сервисов будет ещё х.з. сколько подобных и использование последовательности подобных вызовов в каждом контроллере , которому нужны эти данные, начинает напоминать "костыли". Подскажите "правильные" подходы: использование событий, наследование классов каких-то системных сервисов, ну, или как-то ещё. Т.е. в идеале контроллер ( страницы, например ) должен иметь нужные ему данные, либо обратившись к какому-то одному ресурсу. Надеюсь понятно объяснил. Заранее благодарен.