اكتشاف اللغة وتغيير url (إعادة التوجيه) لتضمين اللغة

ما أريد فعله هو اكتشاف لغة متصفح المستخدمين وإعادة توجيهه إلى صفحة تحتوي على الإعدادات المحلية في عنوان url.

اعتقدت أن أسهل طريقة هي تسجيل مستمع النواة. هذا ما فعلته:

services:
    kernel__request_listener:
        class: Me\MainBundle\Listener\KernelRequestListener
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
        calls:
            - [ setContainer, [ @service_container ] ]

KernelRequestListener.php

...
/**
 * @Service
 */
class KernelRequestListener
{
    /**
     * @Observe("kernel.request")
     */
    public function onKernelRequest( GetResponseEvent $response )
    {

    if( $newLocale = $this->newLocale() )
    {
        $parmArray = $request->get('_route_params');
        $parmArray['_locale'] = $newLocale;

        $redirectResponse = new RedirectResponse( $this->getContainer()->get('router')->generate($request->get('_route'), $parmArray) );
        $redirectResponse->headers->setCookie( new Cookie('b_locale', $newLocale, time() + 2592000) );

        $response->setResponse( $redirectResponse );
    }
    }
...
}

The method $this->newLocale() just detects if the user should be redirected to another language and returns the new language code (i.e. DE or FR).

هنا تأتي المشكلة: أنا أستخدم الأصول لضغط ملفات JS و jms/i18n-routing-bundle للقيام بالتوجيه المستند إلى الإعدادات المحلية. عندما يقوم مستمع النواة بتحويل الإعدادات المحلية ، تبدأ الصفحة في تحميل ملفات JS مرارًا وتكرارًا. أيضا ، هناك عدة صفحات (على سبيل المثال ، التعريف ، تسجيل الدخول/الخروج ، الخ) حيث لا ينبغي أن تتم أي إعادة توجيه لأنها لا معنى لها أو يكسر Smthing.

هو مستمع النواة المكان المناسب للقيام بمثل هذا التوجيه أو هل هناك أي مكان أفضل. كيفية حل المشاكل المذكورة أعلاه؟

0

1 إجابة

أضف قبل الرمز الخاص بك:

public function onKernelRequest(GetResponseEvent $event)
{
    if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
        return;
    }

    $request = $event->getRequest();
    if ($request->getRequestFormat() !== 'html') {
        return;
    }

    [CODE]
0
وأضاف
بالتاكيد! شكرا جزيلا. يمكن العثور على بعض المعلومات الأساسية عن ذلك في Cookbook
وأضاف المؤلف madc, مصدر