2012-09-21 41 views
2

有些人在視圖腳本中報告了訪問,設置或從baseUrl()獲取正確值的問題。但我想知道爲什麼有必要使用它,至少在ZF應用程序位於虛擬專用主機(Amazon EC2)的情況下,我可以完全控制目錄結構和apache重寫規則,以及路線。在Zend Framework視圖腳本中使用baseUrl()是否很重要?

我知道,例如,在文件系統foo.jpg生活public/images/foo.jpg,並且應用程序的mod_rewrite將直接向public所有請求 - 所以在我看來,劇本就簡單多了/更清晰,更有效地寫類似

<img src="/images/foo.jpg" /> 

代替

<img src="<?php echo $this->baseUrl();?>/images/foo.jpg" /> 

不使用baseUrl()真正提供什麼樣的面向未來的穩健性或其他利益的?到目前爲止,我還沒有使用它,並沒有問題。但是我繼承了一些使用它的代碼,並且我傾向於在編輯包含它們的視圖腳本時去掉這些用法。我會後悔嗎?

回答

4

使用這種方式,它不是真的有用,但在另一方面,使用這種方式

echo $this->baseUrl('/images/foo.jpg') 

可能被證明是在未來有用,因爲你可以打印網址前面添加邏輯。想象一下,在幾年內,你的網站增長的方式超出了你的預期,你必須將所有的靜態內容移動到Content delivery network (CDN),你將不得不手動(或通過搜索和替換)來更正所有的圖片/ css/js實例URL。使用baseUrl()(或者將其命名爲assetUrl()),您只需添加CDN的網址,並且它將在您的應用程序中的任何地方被修復。

編輯

我發現你繼承了代號爲baseUrl()一個用途:

這將讓你一個共同的URL部分添加到您的所有鏈接和引用,在情況您的網站是不是在域

i.e. : www.mysite.com/zf-app/ 

在你的配置文件的根,你將只需要添加

resources.frontController.baseUrl = "/zf-app/" 

爲它工作,和所有鏈接將與部分

+0

我想我明白你的觀點。你的意思是,將來我可以使用baseUrl()成員函數編寫自己的視圖助手,該函數將檢查其參數以確定適用於該特定資源的CDN服務器。我想這是有道理的。但是它出現在我繼承的代碼中的方式是我在問題中顯示的方式,只是「手動」地將空值參數的調用結果添加到前面。所以我會爲此+1,因爲它提供了有用的洞察力,但如果有其他人想出使用它的理由,請延遲檢查它。 – sootsnoot

+1

+1。我總是使用'baseUrl'助手來擺脫HTML中的「硬編碼」路徑。設想一種情況,您將應用分發給某人,但他們不會將其安裝在網站的根目錄中,現在所有內容引用都必須更改爲使用baseUrl。現在就使用它,它可以節省很多時間,並使應用程序更加便攜。 – drew010

+0

好的,編輯指出了一個簡單的用法,可能是原始代碼作者想到的,儘管顯然最初的答案顯示了幫手的使用方式,所以我已經接受了答案。有一天使用CDN的可能性似乎比將它安裝在除域以外的其他地方更可能。所以我想這不是剝離我找到的用途,而是將它們改爲建議的形式。感謝您的洞察! – sootsnoot

1

完美的例子,預先考慮。我有幾個基本的Zend-y實用程序,我在不同的系統上構建。在我的測試平臺上,我只是用自己的文檔根虛擬託管它們。通常我通過遠程網絡瀏覽器訪問這些工具,但是這需要我的VPN運行它的系統,因爲我沒有創建這些工具,而只是在子網之外,並且不想將它們暴露給面向互聯網的站點。 所以,隨着android手機和像bitweb服務器的東西,可以讓你在袖珍手機上以最小化的形式運行lighttpd,php和mysql。唯一的問題是,它沒有真正建立起足夠強大的android操作系統上的虛擬主機。 沒問題,它會允許基本別名,所以我只是將所有工具都移到我SD卡上它們自己的子目錄中,並使用lighttpd mod_alias定義指向每個子目錄,然後爲每個子目錄創建重寫規則。但這導致我這個帖子和其他人喜歡它來修復所有靜態URL指向href =「/ some/path/to/static/content」我甚至不得不更新一些URL到絕對路徑的工具請改用{view} - > url()調用。 通過將baseUrl調用添加到靜態內容的前端,並使用視圖url()方法調用控制器動作,現在我可以將整個Zend MVC移動到任何一個獨立工具,並將它們放到任何我想要的目錄中按照我的願望,從網絡樹的深處運行。剩下的工作就放在Zend上,只需要在lighttpd conf文件中2-3格式正確的條目。

相關問題