3

ユーザーが希望する国、州、都市を選択できるサイトを構築しています。

これらのパラメータを選択すると、次のようなページに移動します。en.example.com/spain/madrid/madrid/

問題は、新しいURLを作成するたびに、これら3つの変数を渡す必要があり、_localesymfony自体がパラメーターに渡す変数のようにそれらを作成するために何かできるかどうか疑問に思っていました。

ありがとう

4

1 に答える 1

2

さらに検索した後、私はこの投稿を見つけました:http: //blog.viison.com/post/15619033835/symfony2-twig-extension-switch-locale-current-route

アイデアを使用して必要な変更を加えました。これが私の拡張機能の最終的なコードです。

<?php

namespace Comehoy\CoreBundle\Twig\Extension;

use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;

class PathExtension extends \Twig_Extension
{

    private $request;
    private $router;

    public function __construct(Router $router) {
        $this->router = $router;
    }

    public function onKernelRequest(GetResponseEvent $event) {
        if ($event->getRequestType() === HttpKernel::MASTER_REQUEST) {
            $this->request = $event->getRequest();
        }
    }

    public function getFunctions()
    {
        return array(
            'l10n_path' => new \Twig_Function_Method($this, 'getPath')
        );
    }

    public function getPath($name, $parameters = array())
    {
        $parameters = array_merge($parameters, [
            'country' => $this->request->get('country'),
            'state' => $this->request->get('state'),
            'city' => $this->request->get('city'),
        ]);

        return $this->generator->generate($name, $parameters, false);
    }

    public function getName()
    {
        return 'twig_my_path_extension';
    }

}

そして、構成に関しては、ポストと同じです

services:
    twig.localized_route_extension:
        class: Acme\CoreBundle\Twig\PathExtension
        tags:
            - { name: twig.extension }
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
        arguments: [@router]

また、国、州、都市を使用するルートについては、各ルートで繰り返されないようにプレフィックスを付けています。

acme_core:
    resource: "@AcmeCoreBundle/Controller/"
    type:     annotation
    prefix:   /{country}/{state}/{city} 

それが他の誰かを助けることを願っています。

于 2012-11-11T22:35:27.090 に答える