Symfony、Twig:持久路由参数
Symfony, Twig: Persistent route parameters
我正在用 Symfony3 制作一个应用程序。应用程序的一部分由动态子域分割 --- 子域由一个 slug 表示。
subdomains:
host: "{slug}.{domain}"
default:
slug: example
...
当 运行 在此类路线的本地示例中,例如http://a.localhost
当我在 Twig 中创建 link 时,使用 {{ url('route') }}
或 {{ path('route') }}
,子域总是 被遗忘 ,然后插入参数变为默认值 示例 ,始终生成路由 http://example.localhost
.
有没有办法隐式复制参数,或将某些参数标记为持久性,这样我就不必让所有 link 都包含 slug像这样 {{ url('route', {'slug' : slug}) }}
,以便留在子域中?
谢谢
我创建了一个 TwigExtension 用于在子域内生成链接。
如果可以像我在问题中提到的那样制作一些参数"persistent",我会更愿意。这些将隐式地跨相对路径进行,但可能会因显式参数选择而无效。如果这是不可能的,我认为这是比手动添加参数更好的选择,也是迄今为止最好的选择。
扩展名class
/**
* 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') }}
我正在用 Symfony3 制作一个应用程序。应用程序的一部分由动态子域分割 --- 子域由一个 slug 表示。
subdomains:
host: "{slug}.{domain}"
default:
slug: example
...
当 运行 在此类路线的本地示例中,例如http://a.localhost
当我在 Twig 中创建 link 时,使用 {{ url('route') }}
或 {{ path('route') }}
,子域总是 被遗忘 ,然后插入参数变为默认值 示例 ,始终生成路由 http://example.localhost
.
有没有办法隐式复制参数,或将某些参数标记为持久性,这样我就不必让所有 link 都包含 slug像这样 {{ url('route', {'slug' : slug}) }}
,以便留在子域中?
谢谢
我创建了一个 TwigExtension 用于在子域内生成链接。
如果可以像我在问题中提到的那样制作一些参数"persistent",我会更愿意。这些将隐式地跨相对路径进行,但可能会因显式参数选择而无效。如果这是不可能的,我认为这是比手动添加参数更好的选择,也是迄今为止最好的选择。
扩展名class
/**
* 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') }}