2015-11-01 2 views
0

Я разрабатываю сайт под Zend Framework 1.12, где пользователи могут загружать фотографии, чтобы проиллюстрировать их профиль.Как использовать функцию соответствия в Zend (ZF1) Пользовательский маршрут

Я пытаюсь реализовать функцию, которая будет проверять, каждый раз, когда отображается миниатюра, если она существует, и сохранить его в различных размерах, если нет (цель состоит в том, чтобы ускорить просмотр, уменьшая HTTP размер запроса):

  1. зарегистрированный пользователь загрузить его в полный размер оригинального изображения (например, 2400 х 2400px 1MB)
  2. изображение сохраняется в папке с именем USER_SIZE на сервере
  3. Другие пользователи ориентироваться на сайте:
    • домашней страницы или любой другой страницы
    • страница со списком пользователей, где я хочу, чтобы отобразить 50х50 миниатюру для каждого пользователя
    • подробный профиль, где я хочу, чтобы отобразить 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-адреса и получить что-то вроде миниатюр/scale/50x50/userpicture.jpg в результате функции совпадения. Тем не менее, я полностью не могу захватить вызов маршрутизатора в функции соответствия. Это очень плохо документировано в документации Zend, и я не нашел никаких идей с Google или StackExchange.

Знаете ли вы, когда и как функция соответствия вызывается в рабочем процессе? Кто-нибудь сделал что-то подобное, что могло бы помочь?

+0

Не уверен, что вы подразумеваете, не имея возможности «захватить вызов» в функцию соответствия. Если вы просматриваете свой URL 'miniatures/xxx' в браузере, соответствует ли ваш собственный маршрут или нет? –

+0

Привет!нет, если я непосредственно набираю URL-адрес, похожий на 'miniatures/xxx', функция match не вызывается. –

+0

Хорошо, как вы добавляете свой маршрут к маршрутизатору? –

ответ

0

Спасибо Тим, что ты прав!

По умолчанию ZF htaccess игнорирует файлы, которые уже существуют. Если вы создаете эти измененные изображения с тем же адресом, что и ваш маршрут (но в общей папке), последующие запросы будут обходить ZF. Это не обязательно плохо, но я думаю, поэтому он не работает так, как вы ожидаете.

Проблема была связана с Htaccess, в котором я имел URL переписывания параметр для IMG файлов сохранить в подкаталоге общих папок.

Мне также пришлось хранить измененные изображения за пределами общей папки.

Смежные вопросы