获取网站的基本url,并在Symfony 2中全局传递给树枝

我正在从CodeIgniter切换到Symfony 2.有人可以给我一个例子,如何:

  • 获取基础url(没有路由特定部分的url)
  • 全局地将这个variables传递给树枝包,这样我就可以在每个模板中使用它。

为什么你需要得到这个根url? 你不能直接生成绝对URL吗?

{{ url('_demo_hello', { 'name': 'Thomas' }) }} 

这个Twig代码将生成_demo_hello路由的完整http:// url。

实际上,获取网站的基本url只是获取主页path的完整url:

 {{ url('homepage') }} 

主页 ,或任何你在路由文件中调用它)。

这是现在免费在树枝模板(testingsf2版本2.0.14)

 {{ app.request.getBaseURL() }} 

在后来的Symfony版本(2.5版testing)中,请尝试:

 {{ app.request.getSchemeAndHttpHost() }} 

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

 {{ app.request.getSchemeAndHttpHost() }} 

基础URL在Symfony\Component\Routing\RequestContext

它可以像这样从控制器中获取:

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

如果你想要一个Symfony应用程序的基本URL,你应该使用getSchemeAndHttpHost()getBaseUrl()连接在一起,类似于getUri()工作方式,除了没有路由器path和查询string。

 {{ app.request.schemeAndHttpHost ~ app.request.baseUrl }} 

例如,如果你的Symfony网站URL位于https://www.stackoverflow.com/app1/ ,那么这两个方法返回这些值:

getSchemeAndHttpHost

 https://www.stackoverflow.com 

getBaseUrl

 /app1 

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

对于Symfony 2.3+,获取控制器中的基础url应该是

 $this->get('request')->getSchemeAndHttpHost(); 
  <base href="{{ app.request.getSchemeAndHttpHost() }}"/> 

或从控制器

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

也为js / css /图像url有方便的function资产()

 <img src="{{ asset('image/logo.png') }}"/> 

您可以定义一个基本模板并在其中呈现“全局部分”,而不是将variables全局传递给模板。 基本模板可以被inheritance。

渲染模板示例从symfony文档:

 <div id="sidebar"> {% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %} </div> 
 {{ dump(app.request.server.get('DOCUMENT_ROOT')) }}