PHPackages                             grigor/yii2-generator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. grigor/yii2-generator

ActiveYii2-extension[API Development](/categories/api)

grigor/yii2-generator
=====================

generator rest api

1.0.2(5y ago)0171MITPHPPHP &gt;=7.4

Since Mar 7Pushed 5y ago1 watchersCompare

[ Source](https://github.com/cmkcmykmailru/yii2-generator)[ Packagist](https://packagist.org/packages/grigor/yii2-generator)[ RSS](/packages/grigor-yii2-generator/feed)WikiDiscussions master Synced 6d ago

READMEChangelog (3)Dependencies (8)Versions (4)Used By (1)

yii2-generator
==============

[](#yii2-generator)

Генератор настроек rest api на основе аннотаций для расширения [yii2-rest](https://github.com/cmkcmykmailru/yii2-rest). По сути это утилита которая преобразует аннотации в коде в настройки которые нужны расширению [yii2-rest](https://github.com/cmkcmykmailru/yii2-rest). Она может использоваться в консоли и отдельно от нее, в зависимости от потребностей.

Установка
---------

[](#установка)

Предпочтительный способ установки этого расширения - через [composer](http://getcomposer.org/download/).

Запустите команду

```
php composer.phar require --prefer-dist grigor/yii2-generator "1.0.2"

```

или добавьте в composer.json

```
"grigor/yii2-generator": "^1.0.2",

```

Процесс настройки описан в расширении [yii2-rest](https://github.com/cmkcmykmailru/yii2-rest).

Система имеет две консольные команды

```
php yii generator/api/create
php yii generator/api/dev
```

Команда generator/api/create сканирует проект и ищет настройки в аннотациях, за тем конвертирует их для [yii2-rest](https://github.com/cmkcmykmailru/yii2-rest). В параметре можно указать путь сканируемой папки, тогда будет сканироваться не весь проект, а только указанная папка.

Вывод будет примерно таким:

```
Начал сканировать директорию: /var/www/users
Найден метод: api\repositories\SomeServiceOrRepository::getDemoContextMethod(...);
              Route:       /v1/context/demo/
              Method:      GET
              Context:     api\context\FindModel
              Response:    201

Найден метод: api\repositories\SomeServiceOrRepository::getPhone(...);
              Route:       /v1/shop/phones/
              Method:      GET
              Serializer:  api\serializers\SerializePhone

Найден метод: api\repositories\SomeServiceOrRepository::getAllPhones(...);
              Route:       /v1/shop/phones
              Method:      GET
              Serializer:  api\serializers\SerializePhone

Найден метод: api\repositories\SomeServiceOrRepository::createPhone(...);
              Route:       /v1/shop/phones
              Method:      POST
              Response:    201

Найден метод: api\repositories\SomeServiceOrRepository::createAndReturnPhone(...);
              Route:       /v2/shop/phones
              Method:      POST
              Response:    201

Найден метод: api\repositories\SomeServiceOrRepository::updatePhone(...);
              Route:       /v1/shop/phones/
              Method:      PUT
              Response:    202
              Serializer:  api\serializers\SerializePhone

Завершил.

Целевых файлов:............1 шт.
Методов:...................6 шт.
Просканировано:............9933 файлов
Затрачено времени:.........3.805 сек.
```

Для того, чтобы аннотации работали в классе который их содержит нужно использовать:

```
use grigor\generator\annotation as API;
```

Пример аннотации:

```
    /**
     * @API\Route(
     *     url="/v1/shop/phones",
     *     methods={"GET"},
     *     alias="phones/index"
     * )
     * @API\Serializer("api\serializers\SerializePhone")
     * @return DataProviderInterface
     */
     public function getAllPhones(): DataProviderInterface
```

\###Все настройки в аннотациях

\####@Route

```
Route(
     url="/v1/shop/phones",
     methods={"GET"},
     alias="phones/index"
 )
```

url - адрес по который будет отрабатывать

methods - указываются методы GET POST PUT и т.д

alias - т.к. контроллеров как таковых нет для генерации url в коде нужно указывать такой alias используется этот алиас при генерации ссылок в коде Yii::$app-&gt;urlManager-&gt;createUrl(\["phones/index"\]); используется в штатном режиме.

\####@Serializer

```
Serializer("api\serializers\SerializePhone")
```

Если вы хотите как-то по другому сериализовать возвращаемый объект можете указать калсс сериализатора. см. подробности [yii2-rest](https://github.com/cmkcmykmailru/yii2-rest).

\####@Permission

```
Permission({"admin", "user"})
```

Если вам нужно ограничить доступ, то можно перечислить разрешения и роли.

\####@Context

```
Context("api\context\FindModel")
```

Ограничитель области действия, можно так сказать, (типа как findModel). Вернуть он может массив с недостающими в отрабатывающем методе параметрами. Например у нас есть метод public function getProfile(string $id) а api-шка должна отдавать профиль текущего юзера. Т.е. для пользователя системы нет параметра id получается url примерно такой /v2/user/profile метод GET и все, но мы используем public function getProfile(string $id) где нужно передать id user-а в данном случае текущего. см. подробнее [yii2-rest](https://github.com/cmkcmykmailru/yii2-rest).

\####@Response

```
Response(statusCode="202")
```

Если нужно вернуть статус код отличающийся от 200, то можно использовать такую аннотацию.

\###Настройки Команда generator/api/dev сканирует папки указанные в настройках приложения например в common/config/params.php:

```
