【问题标题】:Slim3 + Twig > Full URL for href links instead of relative ones.Slim3 + Twig > href 链接而不是相对链接的完整 URL。
【发布时间】:2017-10-27 21:04:47
【问题描述】:

我将 Slim3 与 Twig 一起使用。现在,当我尝试在树枝模板中使用path_for 帮助程序“构建”链接时,我没有得到像https://domain.tld/path/to/something 这样的完整URL,而只是/path/to/something。我错过了什么?

【问题讨论】:

标签: php twig slim-3


【解决方案1】:

如果您希望 Twig 帮助程序 path_for 返回完整的 URL 而不是绝对的,您需要设置 basePath 属性在路由器上。

抓住容器:

$container = $app->getContainer();

抓住路由器:

$router= $container->get('router');

设置basePath:

$router->setBasePath('https://domain.tld');

【讨论】:

  • $container = $app->getContainer(); $router = $container->get('router'); $router->setBasePath(getenv('APP_HOST')); 由于某种原因,这没有做任何事情。链接在页面源中仍然是相对的。将$container->get('settings') 更改为$container->get('router')。由于“设置”不包含 setBasePath 方法。现在我没有收到任何错误,但也没有任何改变。 :P
  • 顺便说一句。使用 .env 文件管理 vital 数据,因此 getenv (可以使用,使用 var_dump 检查)。
【解决方案2】:

我已经破解了slim/twig-view 扩展以使其正常工作。所以在 TwigExtension.php 中我改变了

public function pathFor($name, $data = [], $queryParams = [], $appName = 'default') 
{
    return $this->router->pathFor($name, $data, $queryParams);
}

public function pathFor($name, $data = [], $queryParams = [], $appName = 'default')
{
    if (getenv('APP_HOST') != '') {
        return getenv('APP_HOST') . $this->router->pathFor($name, $data, $queryParams);
    }
    return $this->router->pathFor($name, $data, $queryParams);
}

打赌有一种更优雅的方法可以解决这个问题。但目前这解决了我的问题。

这当然需要使用 .env 文件和库,使变量可以通过getenv() 访问。为此,我使用PHPDotenv。我猜你可以从各种角度解决这个问题。

我仍然不知道为什么@Scriptonomy 的解决方案不起作用。它真的应该。但就我而言,它只是没有......欢迎评论我可能搞砸的地方! :)

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2011-02-21
    • 1970-01-01
    • 2013-05-10
    • 2023-03-12
    • 2015-10-20
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多