情報については、私が現在取り組んでいるプロジェクトは Symfony 2.3 です。
DeviceListener
ユーザーデバイスのチェックというイベントリスナーがあります。( MobileDetectクラスを使用します)
そのデバイスに関連付けられているテンプレートがあるフォルダーを指定する必要があります (例としてモバイル)
現時点では、イベントリスナーが機能し、ユーザーがスマートフォンまたはデスクトップを使用しているかどうかを確認でき、Mobile
フォルダーを見つけることができます。しかし、テンプレに間に合わなかった。
これがリスナーの作業コードです
namespace AppBundle\EventListener;
use Mobile_Detect;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class DeviceListener
{
/**
* Twig Loader
* @var \Twig_Loader_Filesystem
*/
protected $loader;
/**
* @var Session
*/
protected $session;
/**
* DeviceListener constructor.
* @param \Twig_Loader_Filesystem $loader
*/
public function __construct(\Twig_Loader_Filesystem $loader, Session $session)
{
$this->loader = $loader;
$this->session = $session;
}
/**
* @param GetResponseEvent $event
*/
public function onKernelRequest(GetResponseEvent $event)
{
$device = $event->getRequest()->headers->get('User-Agent');
$class = new Mobile_Detect();
$mobile = $class->isMobile($device);
$path_mobile = sprintf('%s/../Resources/views/Mobile', __DIR__);
if ($mobile) {
$this->loader->prependPath($path_mobile);
}
}
}
そして私が設定したservice.yml:
app.device_listener:
class: AppBundle\EventListener\DeviceListener
arguments:
- @twig.loader.filesystem
- @session
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest}
ご覧のとおり、私は使用していますが、使用する方がより良い解決策であるonKernelRequest
と思います。onKernelView
また、テスト目的で、Resources/views
モバイル デバイス用のテンプレートを含む Mobile フォルダーに作成しました。
AppBundle
|
-Resources
|
- views
|
- Mobile
| |
| - index.html.twig
- someView.html.twig
- someView.html.twig
私のテンプレート
{% extends '@AppBundle/layout.html.twig' %}
{% block body %}
<p>This template is exclusively for mobile !</p>
{% endblock %}
何か案は?