Yii2 Restful API - пример добавления нового действия

Для создания надежного API с использованием Yii2, есть ли у кого-нибудь хороший пример того, как добавить новое действие в контроллер? Спасибо.

Ответы

Ответ 1

Я не уверен, что вы просите дополнительных действий рядом с CRUD или просто для CRUD, поэтому я пишу детали для обоих случаев.

Во-первых, фреймворк включает \yii\rest\ActiveController, который обеспечивает типичную оперативную работу API и управление URL-адресами.

В принципе, контроллер предопределяет выполняемые CRUD операции:

POST /resourceactionCreate → Создать ресурс

GET /resource/{id}actionView → Прочитать ресурс

PUT, PATCH /resource/{id}actionUpdate → Обновить ресурс

DELETE /resource/{id}actionDelete → Удалить ресурс

GET /resourceactionIndex → Список всех ресурсов

Правила маршрутизации URL-адресов и определения действий можно найти в \yii\rest\ActiveController, \yii\rest\UrlRule и соответствующем \yii\rest\*Action.

Во-вторых, если вы хотите добавить дополнительный дополнительный API в контроллер, вы можете просто написать свой дополнительный actionXxxxx() и в конфигурации добавить следующие правила URL в urlManager:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        [
            'class' => 'yii\rest\UrlRule',
            'controller' => ['resource'],
            'pluralize' => false,
            'extraPatterns' => [
                'POST {id}/your_preferred_url' => 'xxxxx', // 'xxxxx' refers to 'actionXxxxx'
            ],
        ],
    ],
],

Эффективно это создаст новое правило маршрутизации, запросив POST /resource/{id}/your_preferred_url вызывать actionXxxxx вашего ResourceController.

Ответ 2

Вот хороший пример с использованием расширенного шаблона Yii 2

https://github.com/deerawan/yii2-advanced-api

подробнее об этом проекте http://budiirawan.com/setup-restful-api-yii2/

также вы можете использовать шаблон шаблона Yii 2, если хотите. что вам нужно сделать, следуйте такой структуре папок (v1 для версии) (Yii doc -A модуль может состоять из подмодулей.) (GiovanniDerks - базовые подмодули)

-modules
--api
---v1
----controllers
----models