我在Symfony3中制作应用程序。部分应用程序由动态子域划分 - 子域由段塞表示。
subdomains:
host: "{slug}.{domain}"
default:
slug: example
...
当在这样的路线的本地示例上运行时,例如http://a.localhost
当我在Twig中创建链接时,使用{{ url('route') }}
或{{ path('route') }}
,子域始终忘记,并且参数中的slug会降为默认示例< / em>,始终制作路线http://example.localhost
。
有没有办法隐式复制参数,或者标记一些持久的参数,这样我就不必像所有{{ url('route', {'slug' : slug}) }}
那样使所有的链接都包含了slug ,按顺序留在子域?
谢谢
答案 0 :(得分:2)
我创建了一个TwigExtension,目的是在子域内生成链接。
我更愿意,如果我在问题中提到的那样可以使一些参数“持久”。这些将隐含地跨相对路径传递,但可能与显式参数选择无关。如果这是不可能的,我认为这比手动添加参数和目前最佳选项更好。
扩展类
/**
* ApplicationExtension constructor.
*
* @param Router $router
* @param RequestStack $requestStack
*/
public function __construct(Router $router, RequestStack $requestStack)
{
$this->router = $router;
$this->requestStack = $requestStack;
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('domainPath', [
$this,
'domainPath'
]),
];
}
public function domainPath($route_name, $params = [])
{
if (!array_key_exists('slug', $params)) {
$params['slug'] = $this->requestStack->getCurrentRequest()->attributes->get('slug');
}
return $this->router->generate($route_name, $params);
}
public function getName()
{
return 'application_extension';
}
注册服务(DI和标签)
application.twig.application_extension:
class: ApplicationBundle\Twig\ApplicationExtension
arguments: ["@router", "@request_stack"]
public: false
tags:
- { name: twig.extension }
在模板中使用
{{ domainPath('route_name') }}