geo*_*ydv 83 url base-url symfony
我正在从CodeIgniter切换到Symfony 2.有人可以给我一个如何:
cod*_*boy 137
现在可以在twig模板中免费使用(在sf2版本2.0.14上测试)
{{ app.request.getBaseURL() }}
Run Code Online (Sandbox Code Playgroud)
在后来的Symfony版本(在2.5上测试)中,尝试:
{{ app.request.getSchemeAndHttpHost() }}
Run Code Online (Sandbox Code Playgroud)
Dam*_*ien 85
为什么需要获取此根URL?你不能直接生成绝对URL吗?
{{ url('_demo_hello', { 'name': 'Thomas' }) }}
Run Code Online (Sandbox Code Playgroud)
此Twig代码将生成_demo_hello路径的完整http:// url.
事实上,获取网站的基本网址只是获取主页路线的完整网址:
{{ url('homepage') }}
Run Code Online (Sandbox Code Playgroud)
(主页,或您在路由文件中称之为的任何内容).
Hug*_*ira 51
您可以使用新的请求方法getSchemeAndHttpHost()
:
{{ app.request.getSchemeAndHttpHost() }}
Run Code Online (Sandbox Code Playgroud)
sum*_*lki 32
基本网址在内部定义Symfony\Component\Routing\RequestContext
.
它可以从控制器中获取,如下所示:
$this->container->get('router')->getContext()->getBaseUrl()
Run Code Online (Sandbox Code Playgroud)
Mat*_*sen 28
从Symfony v2.1到v4.1 +有效
如果您希望将基本URL连接到Symfony应用程序,则应使用getSchemeAndHttpHost()
连接在一起getBaseUrl()
,类似于getUri()
工作方式,除非没有路由器路径和查询字符串.
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
Run Code Online (Sandbox Code Playgroud)
例如,如果您的Symfony网站URL存在https://www.stackoverflow.com/app1/
,那么这两个方法将返回以下值:
getSchemeAndHttpHost
https://www.stackoverflow.com
Run Code Online (Sandbox Code Playgroud)
getBaseUrl
/app1
Run Code Online (Sandbox Code Playgroud)
注意:getBaseUrl()
包含脚本文件名(即/app.php
),如果它在您的URL中.
Mr.*_* 14 17
对于Symfony 2.3+,要在控制器中获取基本URL应该是
$this->get('request')->getSchemeAndHttpHost();
Run Code Online (Sandbox Code Playgroud)
小智 14
<base href="{{ app.request.getSchemeAndHttpHost() }}"/>
Run Code Online (Sandbox Code Playgroud)
或来自控制器
$this->container->get('router')->getContext()->getSchemeAndHttpHost()
Run Code Online (Sandbox Code Playgroud)
同样对于 js/css/image urls 有方便的函数 asset()
<img src="{{ asset('image/logo.png') }}"/>
Run Code Online (Sandbox Code Playgroud)
这将创建一个以/
.
对于当前的 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;
}
}
Run Code Online (Sandbox Code Playgroud)
另请参阅有关如何检索当前请求对象的Symfony 官方文档。
归档时间: |
|
查看次数: |
188103 次 |
最近记录: |