CakePHP, хитрые идентификаторы и таблицы маршрутов

Согласитесь, ссылки вида http://site/id намного приятнее для пользователя, чем ссылки вида http://site/controller/action/id, особенно, если основное назначение сайта, например, выдавать картинки или заранее сформированные странички, которые уникальны.

В английской справке по CakePHP сказано, что теперь он поддерживает маршруты именно в такой форме, правда инструкция, даже переведенная на русский язык переводчиком не вполне очевидна.

Итак, простые и понятные вещи:

Router::connect(‘/’,

array(‘controller’ => ‘products’, ‘action’ => ‘display’, 5)

);

Тут все просто и понятно, что при обращении к главной странице будет вызван контроллер products, с методом display и в качестве параметра id ему будет передано 5.

Усложним задачу: сократим стандартную адресную строку /controller/action/id на один элемент, action, например. В этом случае надо прописать вот такой вот маршрут:

Router::connect(

‘/:controller/:id’,

array(‘action’ => ‘view’),

array(‘id’ => ‘[0-9]+’)

);

В результате, мы описали формат адресной строки, что у нас будет только /controller/id, а action будет все время view. Уже лучше.

Избавляемся еще и от контроллера. Я долго думал, но наконец, придумал, как оно должно на самом деле выглядеть. Как и полагается, оно все до невероятности просто.

Router::connect(

‘/*’,

array(‘controller’ => ‘pages’, ‘action’ => ‘display’)

);

Что получаем в результате? Верно, адрес самого простого вида: http://site/id, причем будет вызываться контроллер pages с методом display, а все, что стоит в в заголовке будет передано в качестве id методу.

К слову, если нужна большая уникальность, неподбираемость ключей, неупорядоченность, то, наверное, привязывать записи в базе кроме поля id нужно еще к какому-нибудь полю, например, guid, которое можно довольно несложно потом генерировать, если в контроллере на метод добавления написать что-то вроде

$this->data['image']['guid'] = uniqid(rand(), false);

Первый баг: отваливается таблица каскадных стилей

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

 

Долго искал, почему может отваливаться таблица каскадных стилей от страницы. Оказывается, cakephp в этом очень коварен: стоит указать относительный путь к файлу стилей в шаблоне, как при переходе к любой странице сразу путь к стилю теряется.

 

Решение наидено: будьте внимательны!

Страница 2 из 212
РЕКЛАМА
СЧЕТЧИКИ
 
ДРУЗЬЯ САЙТА
МОИ ПРОЕКТЫ
  • theLesenok.ru
  • 7genkov.ru