0

情報については、私が現在取り組んでいるプロジェクトは 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 %}

何か案は?

4

0 に答える 0