Zend(ZF1)自定义路由中匹配功能的使用方法
How to use match function in Zend (ZF1) Custom route
我正在 Zend Framework 1.12 下开发一个网站,用户可以上传图片来说明他们的个人资料。
我正在尝试实现一个功能,每次显示缩图时都会检查它是否存在,如果不存在则将其保存为不同的大小(objective 是通过减少 HTTP 请求来加速浏览尺寸):
- 注册用户上传他的全尺寸原图(例如2400 x 2400px 1MB)
- 图片保存在服务器上名为USER_SIZE的文件夹中
- 其他用户浏览网站:
- 主页或任何其他页面
- 包含用户列表的页面,我想在其中为每个用户显示 50x50 缩图
- 我想在其中显示 100x100 微型图片的详细用户配置文件
为此,我希望使用自定义路由器来转换图片 URL 并自动缩放/裁剪并保存微缩模型(如果尚不存在)。
Public 页面(浏览量):
<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 的想法。
您知道工作流中匹配函数何时以及如何被调用的吗?有没有人做过类似的事情可以提供帮助?
谢谢蒂姆,你是对的!
The default ZF htaccess will ignore files that already exist. If you're creating these resized images at the same URL as your route (but in the public folder), subsequent requests will bypass ZF. This is not necessarily a bad thing, but I think that's why it's not working as you expect.
问题与 htaccess 有关,我在其中 URL 重写保存在 public 文件夹子目录中的 IMG 文件的参数。
我还必须将调整大小后的图像存储在 public 文件夹之外。
我正在 Zend Framework 1.12 下开发一个网站,用户可以上传图片来说明他们的个人资料。
我正在尝试实现一个功能,每次显示缩图时都会检查它是否存在,如果不存在则将其保存为不同的大小(objective 是通过减少 HTTP 请求来加速浏览尺寸):
- 注册用户上传他的全尺寸原图(例如2400 x 2400px 1MB)
- 图片保存在服务器上名为USER_SIZE的文件夹中
- 其他用户浏览网站:
- 主页或任何其他页面
- 包含用户列表的页面,我想在其中为每个用户显示 50x50 缩图
- 我想在其中显示 100x100 微型图片的详细用户配置文件
为此,我希望使用自定义路由器来转换图片 URL 并自动缩放/裁剪并保存微缩模型(如果尚不存在)。
Public 页面(浏览量):
<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 的想法。
您知道工作流中匹配函数何时以及如何被调用的吗?有没有人做过类似的事情可以提供帮助?
谢谢蒂姆,你是对的!
The default ZF htaccess will ignore files that already exist. If you're creating these resized images at the same URL as your route (but in the public folder), subsequent requests will bypass ZF. This is not necessarily a bad thing, but I think that's why it's not working as you expect.
问题与 htaccess 有关,我在其中 URL 重写保存在 public 文件夹子目录中的 IMG 文件的参数。
我还必须将调整大小后的图像存储在 public 文件夹之外。