更改由 symfony/twig url 助手生成的主机(和端口)

Change the host (and port) generated by the symfony/twig url helper

我的 Symfony 应用程序作为 docker 服务运行。所以它在内部监听 localhost:80。但是要从主机(在 osx 上,所以使用 docker-machine)到达它,我通过 http://192.168.99.100:8080

到达它

每当我让 twig 生成一个完整的 url(例如 {{ url('register') }})时,它会生成一个 url 以 localhost 作为主机。

如何将其更改为我需要的 ip:port 组合?

您可以通过在 kernel.request 的事件侦听器中覆盖路由器上下文参数(主机、端口)来实现它。 检查这个答案

您的 onRequest() 方法应如下所示:

public function onRequest(GetResponseEvent $event)
{
    if (!$event->isMasterRequest()) {
        return;
    }

    $this->router->getContext()->setHost('192.168.99.100');
    $this->router->getContext()->setHttpPort('8080');
    $this->router->getContext()->setHttpsPort('8080');
}

在我的问题中,我没有指定 url 是从命令生成的,因为我认为它不相关。

根据@brevis 的回答,我现在知道要搜索什么(路由器上下文),这让我进入了这个页面:https://symfony.com/doc/current/console/request_context.html

在那个页面上它说你应该添加这个:

# config/services.yaml
parameters:
    router.request_context.host: 'example.org'
    router.request_context.scheme: 'https'
    router.request_context.base_url: 'my/path'
    asset.request_context.base_path: '%router.request_context.base_url%'
    asset.request_context.secure: true

对于这个特定问题,哪个是更简单的答案。