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);

  • http://ognrany.ru Степан Кузнецов

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

  • Vilmzgelmzmina

    Понавилось! А дорого обошлось создание блога? Я торже хочу попорбовать вести своё что-нибудь.

    • http://barmin-aleksandr.ru/ Александр Бармин

      Нет, блог создан своими силами, цена его — стоимость хостинга и доменного имени, где-то около 1 тыс. руб. в год

  • http://zanyoga.ru Тимур Макаров

    Хм… что-то у меня ссылка не открывается, которую указали. Это у всех так, или только у меня?

  • http://barmin-aleksandr.ru/ Александр Бармин

    Что именно не работает, что и где указано, как настроены маршруты и включен ли mod_rewrite у апача?

  • http://icheloveka.ru CЛACTEHA

    За статью благодарю, все по делу, достаточно много кто это уже использует

  • http://detginekologia.ru Максим Семин

    Ну и после этого, как говорится, хотелось бы услышать начальника транспортного цеха ;)

  • http://ozhogy.ru Сергей

    Беда, что вода, — нечаянно на двор придет. :)

  • http://stroymeha.ru Федор Малкин

    Блин… По настоящему красиво написано! Все это так знакомо…и правдиво!

  • http://arhkonstr.ru Xoзяин

    Блин… на самом деле красиво написано! Все это так знакомо…и правдиво!

  • http://lechfiz.ru Beckham

    Вот это да! Большое спасибо! Теперь на день есть работа! :)

  • http://neonatologia.ru Бaндиткa

    Интересно. Иногда такое бывает, что хоть стой хоть падай.

  • http://rosznaki.ru Сергей

    Это хорошо что вы начали вести блог,ведь у вас это отлично получается и надеюсь будет еще лучше. Главное писать о том,в чем вы разбираетесь. Удачи. :)

  • http://encsobakovodstva.ru/39/ нeзaбyдкa

    Интересная тема, продолжайте. Иногда нахожу ответы, которые получить самому просто реально не хватает времени. Премного благодарен!

  • http://uvizdelia.ru/118/ Вячеслав

    Жесть! На самом деле жесть написано. :)

  • adijuh

    Интересно было почитать

  • http://www.adijuh.com adijuh

    Действительно хитрые идентификаторы

РЕКЛАМА
СЧЕТЧИКИ
 
ДРУЗЬЯ САЙТА
МОИ ПРОЕКТЫ
  • theLesenok.ru
  • 7genkov.ru