获取网站的基本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')) }}