Сен 24 2008

Проблемы с путями к статичным файлам в CakePHP

Раздел: МаршрутыМета @ 23:25

В CakePHP для определения путей к файлам используется сложная комбинация обработчиков — маршрутов. Плюс mod_rewrite вносит свою лепту. Из-за всего этого иногда бывает сложно определить правильный путь к статичному файлу, например, сохраненной картинке. Сегодня утром разбирался с этой проблемой.

Задача была такая — отобразить маленькую картинку, которая является ссылкой на полноразмерный файл. Обычно, достаточно конструкции вида:

1
$html->link($html->image('mini/'.$product['Product']['image']), '/img/orig/'.$product['Product']['image'], array('target'=>'blank'), null, 1);

Но в данном случае это не заработало — mod_rewrite на сервере отключен, сайт лежит не в корне домена, а в подкаталоге: http://www.example.com/shop/. Если написать как в примере выше, Кейк упорно выдает ссылки вида http://www.example.com/shop/index.php/img/orig/test.jpg, что естественно не работает.

Помогает использование стандартных переменных и констант, определяемых загрузчиком Кейка. Вот работающий пример для подобного случая:

1
$html->link($html->image('mini/'.$product['Product']['image']), FULL_BASE_URL.$this->webroot.IMAGES_URL.'orig/'.$product['Product']['image'], array('target'=>'blank'), null, 1);

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

  • DS — разделитель директорий. Прямой слеш на unix-системах и обратный — на windows.
  • ROOT — полный путь к папке, содержащей папку приложения (app).
  • APP_DIR — имя папки приложения (только имя, без пути). По-умолчанию app, но может быть другим.
  • APP — полный путь к папке с приложением.
  • CAKE_CORE_INCLUDE_PATH — путь к папке cake, содержащей ядро платформы CakePHP.
  • WEBROOT_DIR — имя папки, отображаемой веб-сервером. По-умолчанию webroot.
  • WWW_ROOT — полный путь к папке, отображаемой веб-сервером.
  • MODELS — полный путь к папке с моделями.
  • CONTROLLERS — полный путь к папке с контроллерами.
  • VIEWS — полный путь к папке с шаблонами.
  • LAYOUTS — полный путь к папке с макетами.
  • CSS — полный путь к папке с таблицами стилей. Обратите внимание! Это путь на диске сервера, а не url-адрес!
  • JS — полный путь к JavaScript’ам.
  • IMAGES — полный путь к папке с картинками (img).
  • TMP — путь до временной папки.
  • IMAGES_URL — часть url-адреса папки с картинками.
  • CSS_URL — часть url папки с таблицами стилей.
  • JS_URL — тоже для JavaScript’ов.

Большинство этих констант и некоторые не описанные здесь создаются в файле /cake/config/paths.php.

Теги: ,

Напиши комментарий!