我正在Zend Framework 1.12下开发一个网站,用户可以上传图片来说明他们的个人资料。
我正在尝试实现一个功能,每次显示一个微缩模型时,如果它存在并将其保存为不同的大小(目的是通过减少HTTP请求大小来加速浏览):
要做到这一点,我希望使用一个自定义路由器来转换图片URL,并自动缩放/裁剪并保存微缩模型(如果它尚不存在)。
公共页面(视图):
<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并接收匹配函数的结果,如 miniatures / scale / 50x50 / userpicture.jpg 。但是,我完全无法在匹配函数中捕获对路由器的调用。这在Zend文档中的记录很少,我没有在Google或StackExchange中找到任何想法。
您知道在工作流程中何时以及如何调用匹配函数?有没有人做过类似的事情可以提供帮助?
答案 0 :(得分:0)
谢谢蒂姆,你是对的!
默认的ZF htaccess将忽略已存在的文件。如果您在与路径相同的URL处创建这些已调整大小的图像(但在公共文件夹中),则后续请求将绕过ZF。这不一定是坏事,但我认为这就是为什么它没有像你期望的那样工作。
问题与htaccess有关,我在其中保存了公共文件夹子目录中的IMG文件的URL重写参数。
我还必须将调整大小的图像存储在公共文件夹之外。