Rest Api is very easy to implement in the base Yii2 application. Just follow these steps. This code works for me.
application structure
yourapp + web + config + controllers ... + api + config + modules + v1 + controllers .htaccess index.php
API / index.php
<?php // comment out the following two lines when deployed to production defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); require(__DIR__ . '/../vendor/autoload.php'); require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); // Use a distinct configuration for the API $config = require(__DIR__ . '/config/api.php'); (new yii\web\Application($config))->run();
API / .htaccess
Options +FollowSymLinks IndexIgnore */* RewriteEngine on
API / config / api.php
<?php $db = require(__DIR__ . '/../../config/db.php'); $params = require(__DIR__ . '/params.php'); $config = [ 'id' => 'basic', 'name' => 'TimeTracker', // Need to get one level up: 'basePath' => dirname(__DIR__).'/..', 'bootstrap' => ['log'], 'components' => [ 'request' => [ // Enable JSON Input: 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ] ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], // Create API log in the standard log dir // But in file 'api.log': 'logFile' => '@app/runtime/logs/api.log', ], ], ], 'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'yii\rest\UrlRule', 'controller' => ['v1/project','v1/time']], ], ], 'db' => $db, ], 'modules' => [ 'v1' => [ 'class' => 'app\api\modules\v1\Module', ], ], 'params' => $params, ]; return $config;
API / modules / v1 / module.php
<?php
API / modules / v1 / controllers / ProjectController.php
<?php namespace app\api\modules\v1\controllers; use yii\rest\ActiveController; class ProjectController extends ActiveController {
link