Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取网站的基本url并将其全局传递给Symfony 2中的twig_Url_Symfony_Base Url - Fatal编程技术网

获取网站的基本url并将其全局传递给Symfony 2中的twig

获取网站的基本url并将其全局传递给Symfony 2中的twig,url,symfony,base-url,Url,Symfony,Base Url,我正在从CodeIgniter切换到Symfony 2。 有人能给我举个例子说明如何: 获取基本url(不包含路由特定部分的url) 全局地将这个变量传递给twig bundle,这样我就可以在每个模板中使用它 为什么需要获取此根url?您不能直接生成绝对URL吗 {{ url('_demo_hello', { 'name': 'Thomas' }) }} 此细枝代码将生成到_demo_hello路由的完整http://url 事实上,获取网站的基本url只是获取主页路径的完整url: {{

我正在从CodeIgniter切换到Symfony 2。 有人能给我举个例子说明如何:

  • 获取基本url(不包含路由特定部分的url)
  • 全局地将这个变量传递给twig bundle,这样我就可以在每个模板中使用它

为什么需要获取此根url?您不能直接生成绝对URL吗

{{ url('_demo_hello', { 'name': 'Thomas' }) }}
此细枝代码将生成到_demo_hello路由的完整http://url

事实上,获取网站的基本url只是获取主页路径的完整url:

{{ url('homepage') }}

(主页,或路由文件中的任何名称)。

您可以定义基础模板并在其中呈现“全局部分”,而不是将变量全局传递给模板。可以继承基础模板

symfony文档中的渲染模板示例:

<div id="sidebar">
  {% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %}
</div>

{%render“AcmeArticleBundle:Article:recentArticles”与{'max':3}%}

基本url在
Symfony\Component\Routing\RequestContext
中定义

它可以从控制器中提取,如下所示:

$this->container->get('router')->getContext()->getBaseUrl()

现在可以在twig模板中免费使用(在sf2版本2.0.14上测试)

在以后的Symfony版本(在2.5上测试)中,请尝试:


您可以使用新的请求方法
getSchemeAndHttpHost()


对于Symfony 2.3+,要在控制器中获取基本url,应

$this->get('request')->getSchemeAndHttpHost();

从Symfony v2.1到v4.1有效+

如果希望将基本URL连接到Symfony应用程序,则应使用与
getBaseUrl()
连接在一起的
getSchemeAndHttpHost()
,类似于
getUri()
的工作方式,但不包括路由器路径和查询字符串

{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
例如,如果您的Symfony网站URL位于
https://www.stackoverflow.com/app1/
,则这两种方法返回以下值:

getSchemeAndHttpHost

https://www.stackoverflow.com
getBaseUrl

/app1

注意:
getBaseUrl()
包括脚本文件名(即
/app.php
),如果它在您的URL中。

同样对于js/css/image URL,还有方便的函数asset()



这将为当前Symfony版本创建一个以
/

开头的绝对url(截至编写此答案时,它是Symfony 4.1),而不是像其他一些答案中那样直接访问服务容器

相反(除非您不使用标准服务配置),通过类型提示注入请求对象

<?php

namespace App\Service;

use Symfony\Component\HttpFoundation\RequestStack;

/**
 * The YourService class provides a method for retrieving the base URL.
 *
 * @package App\Service
 */
class YourService
{

    /**
     * @var string
     */
    protected $baseUrl;

    /**
     * YourService constructor.
     *
     * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
     */
    public function __construct(RequestStack $requestStack)
    {
        $this->baseUrl = $requestStack->getCurrentRequest()->getSchemeAndHttpHost();
    }

    /**
     * Returns the current base URL.
     *
     * @return string
     */
    public function getBaseUrl(): string
    {
        return $this->baseUrl;
    }
}

在一个涉及多域应用程序的情况下,
app.request.getHttpHost
帮助了我。它返回类似于
example.com
subdomain.example.com
(或
example.com:8000
,当端口不是标准端口时)。这是在Symfony 3.4中实现的。

我在这里尝试了所有选项,但它们对我不起作用。 最终,我使用了

{{site.url}


希望这对仍在挣扎的人有所帮助。

在Symfony 5和控制器方法的常见情况下,使用注入的请求对象:


可能的重复非常感谢,我认为这是一种方法,但我只知道{{path(..}}}函数,导致错误的结果。{{url}}正是我所需要的。如果我从symfony控制台命令呈现树枝,假设要生成电子邮件模板,我需要基本url。在这种情况下我该怎么做。有一本食谱:如果我没有使用twig,那么我如何在PHP中重写它?不工作致命错误:未捕获twig\u错误\u语法:第5行“default/template/extension/module/featured.twig”中的未知“url”函数。在J:\xampp\htdocs\sites\opencart3020\system\library\template\Twig\ExpressionParser.php:574堆栈跟踪:#0甚至可以缩短为
{{app.request.baseUrl}}
(它将找到getter方法并自动调用该方法)@Colin O'Dell,更合适的做法是不要在视图中使用方法调用-视图不应该知道对象中有哪些方法。虽然它在symfony中看起来有点不同,但是对于这个答案还是+10。如果我没有使用twig,那么我如何在PHP中重写它?这在以后的版本中不起作用(在sf 2.5上测试)。下面的答案
{{app.request.getSchemeAndHttpHost()}
有效<代码>$this->container->get('request')->getSchemeAndHttpHost()
此函数是在Symfony 2.1中引入的,它从何而来?
站点
包含哪些内容?来自Timber和Wordpress。请在您的回答中添加一些解释-asset到底使用baseUrl吗?在我的项目中,它只打印一个相对URL。在我的项目中,asset使用baseurl,但不使用host和scheme。它生成一个以/开头的绝对url。因此,它在

$this->get('request')->getSchemeAndHttpHost();
{{ dump(app.request.server.get('DOCUMENT_ROOT')) }}
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
https://www.stackoverflow.com
/app1
<img src="{{ asset('image/logo.png') }}"/>
<?php

namespace App\Service;

use Symfony\Component\HttpFoundation\RequestStack;

/**
 * The YourService class provides a method for retrieving the base URL.
 *
 * @package App\Service
 */
class YourService
{

    /**
     * @var string
     */
    protected $baseUrl;

    /**
     * YourService constructor.
     *
     * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
     */
    public function __construct(RequestStack $requestStack)
    {
        $this->baseUrl = $requestStack->getCurrentRequest()->getSchemeAndHttpHost();
    }

    /**
     * Returns the current base URL.
     *
     * @return string
     */
    public function getBaseUrl(): string
    {
        return $this->baseUrl;
    }
}
public function controllerFunction(Request $request, LoggerInterface $logger)
  ...
  $scheme = $request->getSchemeAndHttpHost();
  $logger->info('Domain is: ' . $scheme);
  ...
  //prepare to render
  $retarray = array(
    ...
    'scheme' => $scheme,
    ...
    );
  return $this->render('Template.html.twig', $retarray);
}