我正在从CodeIgniter切换到Symfony2。有人可以给我一个示例如何:
- 获取基本网址(不含路由特定部分的网址)
- 将该变量全局传递给树枝束,以便在每个模板中使用它。
Answers:
为什么需要获取此根URL?您不能直接生成绝对URL吗?
{{ url('_demo_hello', { 'name': 'Thomas' }) }}
此Twig代码将生成_demo_hello路由的完整http:// URL。
实际上,获取网站的基本URL只是获取首页路由的完整URL:
{{ url('homepage') }}
(主页,或您在路由文件中称呼的任何名称)。
现在可在树枝模板中免费获得(在sf2版本2.0.14上测试)
{{ app.request.getBaseURL() }}
在更高版本的Symfony中(在2.5上测试),尝试:
{{ app.request.getSchemeAndHttpHost() }}
{{ app.request.baseUrl }}
(它将找到getter方法并自动调用)
{{ app.request.getSchemeAndHttpHost() }}
有效!
从Symfony v2.1到v4.1 +有效
如果要使用Symfony应用程序的基本URL,则应getSchemeAndHttpHost()
与串联使用getBaseUrl()
,类似于getUri()
工作方式,但没有路由器路径和查询字符串。
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
例如,如果您的Symfony网站网址位于 https://www.stackoverflow.com/app1/
,则这两个方法将返回以下值:
getSchemeAndHttpHost
https://www.stackoverflow.com
getBaseUrl
/app1
注意:如果您的网址中getBaseUrl()
包含脚本文件名(即/app.php
),则应包含该文件名。
对于Symfony 2.3+,要在控制器中获取基本网址,应
$this->get('request')->getSchemeAndHttpHost();
$this->container->get('request')->getSchemeAndHttpHost()
同样对于js / css / image网址,还有方便的函数asset()
<img src="{{ asset('image/logo.png') }}"/>
对于当前的Symfony版本(在编写此答案时为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;
}
}
另请参见Symfony官方文档,有关如何检索当前请求对象。
{{ dump(app.request.server.get('DOCUMENT_ROOT')) }}
我在这里尝试了所有选项,但它们对我没有用。最终我使用了它
{{site.url}}
希望这对仍在挣扎中的人有所帮助。
site
内容?