1 follower

Маршрутизация

Имея готовые классы ресурсов и контроллеров, можно получить доступ к ресурсам, используя URL вроде http://localhost/index.php?r=user/create, подобно тому, как вы это делаете с обычными Web-приложениями.

На деле вам обычно хочется включить «красивые» URL-адреса и использовать все преимущества HTTP-методов (HTTP-verbs). Например, чтобы запрос POST /users означал обращение к действию user/create. Это может быть легко сделано с помощью настройки компонента приложения urlManager в конфигурации приложения следующим образом:

'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'yii\rest\UrlRule', 'controller' => 'user'], ], ] 

Главная новинка в коде выше по сравнению с управлением URL-адресами в Web-приложениях состоит в использовании yii\rest\UrlRule для маршрутизации запросов к RESTful API. Этот особый класс URL-правил будет создавать целый набор дочерних URL-правил для поддержки маршрутизации и создания URL-адресов для указанного контроллера (или контроллеров). Например, приведенный выше код является приближенным аналогом следующего набора правил:

[ 'PUT,PATCH users/<id>' => 'user/update', 'DELETE users/<id>' => 'user/delete', 'GET,HEAD users/<id>' => 'user/view', 'POST users' => 'user/create', 'GET,HEAD users' => 'user/index', 'users/<id>' => 'user/options', 'users' => 'user/options', ] 

Этим правилом поддерживаются следующие точки входа в API:

  • GET /users: разбитый на страницы список всех пользователей;
  • HEAD /users: общая информация по списку пользователей;
  • POST /users: создание нового пользователя;
  • GET /users/123: подробная информация о пользователе 123;
  • HEAD /users/123: общая информация о пользователе 123;
  • PATCH /users/123 и PUT /users/123: обновление пользователя 123;
  • DELETE /users/123: удаление пользователя 123;
  • OPTIONS /users: список HTTP-методов, поддерживаемые точкой входа /users;
  • OPTIONS /users/123: список HTTP-методов, поддерживаемые точкой входа /users/123.

Вы можете настроить опции only и except, явно указав для них список действий, которые поддерживаются или должны быть отключены, соответственно. Например:

[ 'class' => 'yii\rest\UrlRule', 'controller' => 'user', 'except' => ['delete', 'create', 'update'], ], 

Вы также можете настроить опции patterns или extraPatterns для переопределения существующих шаблонов или добавления новых шаблонов, поддерживаемых этим правилом. Например, для включения нового действия search в точке входа GET /users/search настройте опцию extraPatterns следующим образом:

[ 'class' => 'yii\rest\UrlRule', 'controller' => 'user', 'extraPatterns' => [ 'GET search' => 'search', ], ] 

Как вы могли заметить, ID контроллера user в этих точках входа используется в форме множественного числа (как users). Это происходит потому, что yii\rest\UrlRule автоматически приводит идентификаторы контроллеров к множественной форме. Вы можете отключить такое поведение, назначив свойству yii\rest\UrlRule::$pluralize значение false.

Информация: Приведение ID контроллера к множественной форме производится в методе yii\helpers\Inflector::pluralize(). При этом соблюдаются правила английского языка. Например, box будет преобразован в boxes, а не в boxs.

В том случае, если автоматическое приведение к множественному числу вам не подходит, вы можете настроить свойство yii\rest\UrlRule::$controller, где указать явное соответствие имени в URL и ID контроллера. Например, код ниже ставит в соответствие имя u и ID контроллера user.

[ 'class' => 'yii\rest\UrlRule', 'controller' => ['u' => 'user'], ] 

Found a typo, or you think this page needs improvement?
Edit it on GitHub !