gpt4 book ai didi

symfony - 自动传递路径参数

转载 作者:行者123 更新时间:2023-12-02 18:40:47 25 4
gpt4 key购买 nike

我正在构建一个网站,用户可以在其中选择他想要的国家、州和城市。

一旦他选择了这些参数,他就会进入如下页面:en.example.com/spain/madrid/madrid/

问题是,每次我想构建一个新的 url 时,我都必须传递这 3 个变量,我想知道是否可以做一些事情让它们就像 symfony 本身的 _locale 变量一样将其传递给参数。

谢谢

最佳答案

经过更多搜索后,我发现了这篇文章: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]

对于我使用国家、州和城市的路线,我将它们放在前缀中以避免在每条 route 重复。

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

希望对其他人有帮助。

关于symfony - 自动传递路径参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13332115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com