В этой заметке я покажу, как использовать встроенный роутер CodeIgniter'а для решения одной несложной задачи. Прежде всего, пару слов о том, что это такое и зачем нужно. Как вы, наверное, знаете CodeIgniter – это php фреймворк, одними из основных достоинств которого являются простота использования и низкая ресурсоемкость. Тем не менее, его возможности практически не уступают более «тяжелым» аналогам. Одной из таких возможностей и является роутер. Он позволяет с помощью несложных правил настроить внутреннюю адресацию сайта по своему вкусу. Любой запрос браузера передается роутеру, а уже потом – контроллеру.
Таким образом, можно изменить любой из параметров запроса. Например, перенаправить запрос другому контроллеру или добавить/удалить параметры. Делается это достаточно просто. В файле /application/config/routes.
php нужно задать правила в виде: $route[‘выражение’] = “новый_адрес”; выражение – здесь можно использовать регулярные выражения, которые будут использоваться для проверки того, нужно ли применить данное правило к полученному адресу или нет. Теперь переходим к нашей задаче. Допустим, у нас есть сайт (блог) и мы хотим создать для каждой из его записей постоянные ссылки (permalink) (такая функция есть практически во всех движках блогов). Первоначально наши записи доступны по адресу: http://mysite/index. php/main/goto/postid Это стандартная адресация в CodeIgniter. Здесь: main – названия контроллера; goto – имя метода контроллера, который будет обрабатывать запрос; postid – номер записи в базе данных. Нам нужно, чтобы записи были доступны по адресу вида: http://mysite/index. php/post_permalink Сами ссылки создать и хранить не сложно. Для этого достаточно к таблице с записями добавить еще одно поле (permalink) и хранить в нем постоянные ссылки. Примечание. Все постоянные ссылки должны быть уникальными. Переходим к роутеру. Прежде всего, нужно четко понимать как отличить адрес с постоянной ссылкой от обычного. В данном случае отсутствие имени контроллера (main) в начале адреса означает, что запрос содержит постоянную ссылку. Т. е. в этом случае мы должны перенаправить этот запрос методу goto. Если имя контроллера в адресе найдено, то оставляем все без изменений. Реализуется вся эта система с помощью двух простых правил: