Я занимаюсь разработкой веб-сайта под 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 и получить что-то вроде миниатюры / шкалы / 50х50 / userpicture.jpg в результате функции соответствия. Тем не менее, я полностью не могу перехватить вызов к маршрутизатору в функции сопоставления. Это очень плохо документировано в документации Zend, и я не нашел никаких идей с Google или StackExchange.
Вы знаете, когда и как вызывается функция соответствия в рабочем процессе? Кто-нибудь сделал что-то подобное, что может помочь?
Спасибо, Тим, ты прав!
ZF htaccess по умолчанию будет игнорировать файлы, которые уже существуют. Если вы создаете эти изображения с измененным размером по тому же URL-адресу, что и ваш маршрут (но в общей папке), последующие запросы будут игнорироваться ZF. Это не обязательно плохо, но я думаю, именно поэтому это не работает так, как вы ожидаете.
Проблема была связана с htaccess, в котором у меня был параметр перезаписи URL для файлов IMG, сохраненных в подкаталоге общих папок.
Мне также пришлось хранить изображения с измененным размером вне общей папки.
Других решений пока нет …