Сен 24 2008
Проблемы с путями к статичным файлам в CakePHP
В 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.