我正在Zend Framework 1.12下開發一個網站,用戶可以上傳圖片來說明他們的個人資料。如何在Zend中使用匹配功能(ZF1)自定義路由
我試圖實現,將檢查,每次顯示的一個縮影時間的函數,如果它存在,如果不將其保存在不同的尺寸(目的是通過減少HTTP請求大小加快瀏覽):
- 註冊用戶上傳自己的全尺寸的原始圖片(如2400 X 2400px 1MB)
- 照片會保存一個名爲USER_SIZE服務器
- 其他用戶在網站上瀏覽的文件夾中:
- 主頁或任何其它網頁
- 用,我想爲每個用戶顯示的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的想法。
您是否知道何時以及如何在工作流程中調用匹配函數?有人做過類似的事情嗎?
不確定你的意思是不能'捕獲'匹配函數。如果您在瀏覽器中查看您的「縮圖/ xxx」網址,您的自定義路線是否匹配? –
嗨!不,如果我直接輸入一個類似'miniatures/xxx'的URL,則不會調用匹配函數。 –
好的,您如何將自定義路由添加到路由器? –