2011-06-17 51 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