@virtex2000

Symfony4 — Как подключить несколько вариантов оформления/дизайна сайта, и организовать переключение между ними?

Например, есть два варианта дизайна сайта - стандартный и для мобильных приложений. И соответственно, необходимо переключаться между этими вариантами дизайна в зависимости от устройства с которого зашёл пользователь.
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ответы на вопрос 2
@sidni
Php Developer
как не понятен эффект переключения
1) либо делаете адаптивную верстку и тогда все само происходит
2) либо лепите поддомен для мобильных девайсов,
а там либо используйте мульти-роуты
/**
    *  @Route("/", name="mobile_homepage", host="m.example.com")
     * @Route("/", name="homepage")
     */
     public function homepage(Request $request)
    {
        $currentHost = $request->getHttpHost();
         var_dump($currentHost);die;
    }

либо дублируйте экшены
/**
     * @Route("/", name="mobile_homepage", host="m.example.com")
     */
    public function mobileHomepage()
    {
        // ...
    }

    /**
     * @Route("/", name="homepage")
     */
    public function homepage()
    {
        // ...
    }
Ответ написан
@virtex2000 Автор вопроса
Спасибо всем, кто ответил, и за идею с Kernel. В очередной раз "полез" в доки, и нашел ещё вариант решения.

Получается, Symfony4 компилирует конфигурацию, контроллеры, расширения, шаблоны и т.д., и складывает это всё в папку /var/cache, где уже путь к шаблонам жестко прописан. И поменять его после этого в приложении скорее всего не получится.

Значит нам изначально надо создать 2 конфигурации, и в нашем случае в зависимости от $_SERVER['SERVER_NAME'] выбирать одну из них.

Для этого вносим правки в сonfig/packages/twig.php

<?php		
		if (isset($_SERVER['SERVER_NAME']) && preg_match("/m.example.com/i", $_SERVER['SERVER_NAME'])) {
	
			$container->loadFromExtension('twig', [
				  'paths' => [
									'%kernel.project_dir%/templates_mobile' => null
									],
									
					// ... другие опции конфига
			]);
		} else {
			$container->loadFromExtension('twig', [
				  'paths' => [
									'%kernel.project_dir%/templates' => null
									],
									
					// ... другие опции конфига
			]);
		}


Если у вас конфигурация в файле twig.yaml, перепишите её в формате twig.php, и после этого файл twig.yaml удалите.

И вносим правки в src/Kernel.php

<?php
	 // ...
	 
	 public function getCacheDir(): string
	 {
		if (isset($_SERVER['SERVER_NAME']) && preg_match("/m.example.com/i", $_SERVER['SERVER_NAME'])) {	
			return $this->getProjectDir()."/var/cache_mobile/".$this->environment;
		} else {
			return $this->getProjectDir()."/var/cache/".$this->environment;
		}
	 }
	 
	 // ...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы