Урок 8: Работа с URL и маршрутизацией в Yii 2

Мы продолжаем наш курс по изучению фреймворка Yii 2. В 8-ом уроке мы разберем одну из тем, это работу с URL и маршрутизацией. Это важная часть любого веб-приложения, так как именно маршрутизация определяет, как пользователь взаимодействует с вашим сайтом. Мы поговорим о чистых URL, настройке веб-сервера, правилах маршрутизации, создании ЧПУ (человеко-понятных URL) и генерации ссылок.

Чистые URL: настройка веб-сервера (Apache/Nginx)

Чистые URL это URL, которые выглядят понятно и логично для пользователя. Вместо длинных строк с параметрами, например, index.php?r=site/about, мы можем использовать что-то вроде /site/about. Это не только улучшает читаемость, но и положительно влияет на SEO.

Настройка Apache

Для работы чистых URL в Apache нужно включить модуль mod_rewrite и добавить файл .htaccess в корневую директорию вашего проекта. В Yii 2 этот файл уже создан по умолчанию, но давайте разберем его содержимое:

apache
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Эти строки говорят серверу перенаправлять все запросы на index.php, если запрашиваемый файл или директория не существуют. Это позволяет Yii 2 обрабатывать маршруты.

Настройка Nginx

Если вы используете Nginx, настройка будет немного другой. В конфигурации сервера добавьте следующие строки:

nginx
location / {
    try_files $uri $uri/ /index.php?$args;
}

Этот код делает то же самое, что и .htaccess для Apache: перенаправляет запросы на index.php, если файл или директория не найдены.

Практическая задача

  1. Убедитесь, что на вашем сервере включен модуль mod_rewrite (для Apache) или правильно настроен Nginx.
  2. Проверьте, что чистые URL работают, открыв в браузере страницу /site/about. Если вы видите содержимое страницы, значит, все настроено правильно.

Правила маршрутизации в config/web.php

Маршрутизация в Yii 2 настраивается в файле config/web.php. Основной элемент, который нас интересует, это массив rules внутри компонента urlManager. Этот массив определяет, как URL будут преобразовываться в маршруты и наоборот.

Пример базовой настройки

php
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        'about' => 'site/about',
        'contact' => 'site/contact',
    ],
],

Здесь мы включили чистые URL (enablePrettyUrl), убрали index.php из URL (showScriptName) и добавили два простых правила маршрутизации. Теперь, когда пользователь перейдет по адресу /about, Yii 2 вызовет действие actionAbout в контроллере SiteController.

Расширенные правила

Yii 2 позволяет создавать более сложные правила с использованием регулярных выражений. Например:

php
'rules' => [
    'post/<id:\d+>' => 'post/view',
],

Это правило говорит, что URL вида /post/123 будет преобразован в маршрут post/view с параметром id, равным 123.

Практическая задача

  1. Добавьте в config/web.php правило, которое будет преобразовывать URL /user/profile в маршрут user/profile.
  2. Создайте правило для отображения статей, например, /article/123, где 123 это ID статьи.

Параметры в URL: создание ЧПУ (человеко-понятных URL)

ЧПУ это URL, которые легко читаются и понимаются пользователями. Например, вместо /post/view?id=123 можно использовать /post/123-my-article-title. Это не только улучшает восприятие, но и помогает в SEO.

Пример создания ЧПУ

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

php
'rules' => [
    'post/<id:\d+>-<title>' => 'post/view',
],

Теперь URL будет выглядеть как /post/123-my-article-title. В контроллере PostController мы можем получить параметры id и title:

php
public function actionView($id, $title)
{
    $post = Post::findOne($id);
    // Дальнейшая логика
}

Практическая задача

  1. Создайте правило маршрутизации для статей, которое будет включать ID и заголовок.
  2. Реализуйте в контроллере обработку этих параметров и отображение соответствующей статьи.

Генерация ссылок через Url::to()

Yii 2 предоставляет удобный способ генерации ссылок через хелпер Url::to(). Этот метод позволяет создавать URL на основе маршрутов и параметров.

Пример использования

php
use yii\helpers\Url;

// Генерация ссылки на действие контроллера
echo Url::to(['site/about']);

// Генерация ссылки с параметрами
echo Url::to(['post/view', 'id' => 123, 'title' => 'my-article-title']);

Генерация абсолютных URL

Если вам нужно создать абсолютный URL (с доменом), используйте третий параметр:

php
echo Url::to(['site/about'], true);

Практическая задача

  1. Создайте ссылку на страницу контактов с помощью Url::to().
  2. Сгенерируйте абсолютный URL для страницы статьи с ID 456 и заголовком «my-second-article».

В этом уроке мы разобрали ключевые аспекты работы с URL и маршрутизацией в Yii 2. Вы научились настраивать чистые URL, создавать правила маршрутизации, работать с ЧПУ и генерировать ссылки. Эти навыки помогут вам создавать более удобные и SEO-оптимизированные веб-приложения.

Попробуйте выполнить все предложенные задачи и поэкспериментировать с настройками. Если у вас возникнут вопросы, вы всегда можете обратиться к документации Yii 2 или задать вопрос в комментариях ниже.

Если вы хотите изучить Yii 2 от А до Я, рекомендую ознакомиться с полным курсом по ссылке: курс с уроками по Yii 2 для начинающих.

Поделиться статьей:
Поддержать автора блога

Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.

Персональные рекомендации
Оставить комментарий