1. Go to this page and download the library: Download grigor/yii2-rest library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
grigor / yii2-rest example snippets
return [
...
/**
* Это пути где будут лежать настройки правил для рест апи и настройки методов которые будут отрабатывать в место actions.
*
* Если использовать yii2-generator, то лучше пути сразу писать без @alias или конвертировать
* в относительный|реальный путь. Ниже будет описано почему или см. yii2-generator
* grigor\generator\tools\DeveloperTool::beforeAppRunScanDevDirectories($config);.
*/
'serviceDirectoryPath' => Yii::getAlias('@api/data/static/services'),// тут будут лежать настройки методов.
'rulesPath' => Yii::getAlias('@api/data/static/rules.php'), // тут сами правила со ссылками на настройки выше.
/**
* Параметр говорит генератору в каких папках ведется разработка ядра для апи, в общем случае где искать php файлы
* с аннотациями содержащими настройки для апи.
* Этот параметр использует только yii2-generator, но он использует и параметры выше.
*/
'devDirectories' => [
Yii::getAlias('@api'),
]
...
];
return [
0 => [
'pattern' => "v1/shop/products/<id:[\w\-]+>", // url по правилам Yii2 за исключением <controller...> (потом будет кидать исключение на такую настройку)
'verb' => ['GET'], //метод по которому сее деяние будет доступно
'alias' => 'product/index', // т.к. контроллеров при таком подходе нет, а для генерации url требуется роут, то прописываем любой не существующий
'class' => 'grigor\rest\urls\ServiceRule', //правило (наследник UrlRule)
'identityService' => 'eca98246-8562-4edb-8d5d-07c65558d9da' //идентификатор настройки для данного роута
],
... и еще куча правил
];
return [
/** могут использоваться для формирования белых списков уникальных для конкретно этого action */
// 'permissions' => ["guest", "ruleName1", "ruleName2"],
'service' => [
'class' => 'api\project\SomeClass', //экземпляр класса который будет отрабатывать
'method' => 'func' //метод который будет отрабатывать
],
'serializer' => 'api\serialize\SerializeProduct',
'context' => 'api\context\FindModel', // ограничитель области действия - можно так сказать, (типа как findModel)
/** если action предполагает просто какое то действие и после выполнения должен вернуть какой нибудь статус. */
// 'response' => 201,
];
public function __invoke(Product $product): array
{
return [
'id' => $product->id,
'name' => $product->name,
];
}
class FindModel implements ActionContextInterface
{
public function getParams($args): ?array
{
$id = $args['key'];
if ($id !== '...') {
throw new NotFoundHttpException('Page not found.');
}
return ['id' => $id];
}
}
class FindModel implements ActionContextInterface
{
public function getParams($args): ?array
{
return ['id' => \Yii::$app->user->id];// id тут сопоставится с параметром метода getProfile(string $id), потому называться должен также
//причем, если в url будет добавлен параметр id как то так /v2/user/profile/какойтоid (404) или /v2/user/profile?id=какойтоid (проигнорирован) - он будет проигнорирован
}
}
php composer
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.