2011-06-17 126 views
5

我知道在Symfony2的配置中,没有对基础url的引用,因为没有请求;应用程序可以运行在cli或web服务器中,因此我们不能依赖请求。但仍然,我有配置,要求样式表或JavaScript基地网址(例如JQueryHelperBundle,在那里你可以设置你的jQuery本地路径 - 本地网址)。问题是,有没有动态地设置配置的基本URL的方式,而不必改变它,以便:在Symfony2配置中动态设置BaseUrl

  • 应用程序可以从正在开发的任何目录移动,无论是WWW/myproject的或www /富/ myproject而不必更改设置
  • 生产将工作相同,除了用apache重写基本URL会被检测到(virtualhosting是常见的,其中baseurl以'/'映射到web目录)。

有没有办法获得该基地网址信息?将使用$_SERVER['DOCUMENT_ROOT']减去内核根目录之间的区别是检测此类基础url的方法吗?但是,虚拟主机将网址绑定到/在Web目录上呢?对基本网址进行硬编码将项目完全耦合到开发中的位置,并且移动项目需要每次都更改基本网址,这很烦人。

那么,有没有一种方法可以根据环境动态检测Symfony2配置中的基础url,而不依赖于请求?

回答

0

我不得不这样做,在一个服务,所以我在我自己的服务注入路由器服务,然后:

$baseUrl = $router->getContext()->getHost(); 

但我认为它更作为一个黑客工具,Symfony2的框架的一个真正的夹具。例如,控制器可以生成绝对URL很容易地(例如,从symfony的书):

$router->generate('blog_show', array('slug' => 'my-blog-post'), true); 

而在树枝模板,您有{{URL}}功能

我希望这帮助

+1

嗯,但我怎么能在配置中可用?有时候,一些配置使用基本URL,即使在没有任何请求的情况下从CLI运行时,基本URL也可能根据环境,项目位置或虚拟主机而改变。从CLI运行时,基本URL不正确无关紧要)。不知道你是否明白我的意思? – 2011-06-20 00:51:39

+0

在配置中?对不起,我误解了你的问题。我认为这是不可能的,因为配置不是一个动态文件。 – Reuven 2011-06-20 09:30:17