2015-11-01 113 views
0

我正在Zend Framework 1.12下開發一個網站,用戶可以上傳圖片來說明他們的個人資料。如何在Zend中使用匹配功能(ZF1)自定義路由

我試圖實現,將檢查,每次顯示的一個縮影時間的函數,如果它存在,如果不將其保存在不同的尺寸(目的是通過減少HTTP請求大小加快瀏覽):

  1. 註冊用戶上傳自己的全尺寸的原始圖片(如2400 X 2400px 1MB)
  2. 照片會保存一個名爲USER_SIZE服務器
  3. 其他用戶在網站上瀏覽的文件夾中:
    • 主頁或任何其它網頁
    • 用,我想爲每個用戶顯示的50x50微型
    • 詳細的用戶資料,我想顯示一個100x100的縮影圖片的用戶列表頁面

要做到這一點,我希望能夠使用自定義的路由器來轉換圖片的網址,並自動縮放/裁剪,如果它還不存在,保存縮圖。

公共頁面(視圖):

<html> 
<body> 
    ... 
    <img src="<?php echo $this->url(array("method" => "scale", "params" => "50x50", "filename" => $userFileName), "image")"> 
    ... 
</body> 
</html> 

定製路線:

<?php 

require_once 'Zend/Controller/Router/Route/Abstract.php'; 

Class Application_Controllers_Route_Image extends Zend_Controller_Router_Route_Abstract 
{ 
    public static function getInstance(Zend_Config $config) 
    { 
    return new self($config->route); 
    } 

    // NOT WORKING 
    public function match($path) 
    { 
    // Check if the URL is a miniature picture URL 
    if (preg_match("#miniatures/([^/]+)/([^/]*)/(.+)#"){ 
     // resize picture and save miniature 
     ... 
    } 
    } 

    // WORKING 
    public function assemble($data = array) 
    { 
    // Return a new path name for the miniature that should have been 
    // resized and saved in a different folder for which the name is constructed 
    // with params used in the view 
    return sprint("miniatures/%s/%s/%s", $data["method"], $data["params"], $data["filename"] 
    } 
} 

當然這一切的代碼很簡單。作爲匹配功能的結果,我已經能夠使自定義路線生成微型URL並接收諸如縮圖/縮放/ 50x50/userpicture.jpg之類的東西。但是,我完全無法在匹配功能中捕獲到路由器的呼叫。這在Zend文檔中記錄很差,我沒有發現任何有關Google或StackExchange的想法。

您是否知道何時以及如何在工作流程中調用匹配函數?有人做過類似的事情嗎?

+0

不確定你的意思是不能'捕獲'匹配函數。如果您在瀏覽器中查看您的「縮圖/ xxx」網址,您的自定義路線是否匹配? –

+0

嗨!不,如果我直接輸入一個類似'miniatures/xxx'的URL,則不會調用匹配函數。 –

+0

好的,您如何將自定義路由添加到路由器? –

回答

0

謝謝蒂姆你是對的!

默認的ZF htaccess將忽略已存在的文件。如果您在與路線相同的URL(但在公用文件夾中)創建這些調整大小的圖像,後續請求將繞過ZF。這並不一定是壞事,但我認爲這就是爲什麼它不能像你期望的那樣工作。

該問題與htaccess有關,其中我有一個保存在公用文件夾子目錄中的IMG文件的URL重寫參數。

我還必須在公用文件夾以外存儲調整大小的圖像。

相關問題