1. Install Yii2
Download, install and verify the installation of Yii2 (I'm using the advanced application template) .
Instructions: https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-installation.md
Instructions: https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-installation.md
2. Folder structure
- \
- api
- config
- modules
- v1
- controllers
- models
- runtime
- cache
- debug
- logs
- web
- backend
- common
- ...
3. Files
3.1 Add files
I copied the files from the backend directory and edited them afterwards. (Some files have been created manually)
- \
- api
- config
- main.php
- main-local.php
- params.php
- params-local.php
- modules
- v1
- controllers
- ArtistController.php
- models
- Artist.php
- Module.php
- runtime
- cache
- debug
- logs
- web
- .htaaccess
- index.php
- backend
- common
- ...
3.2 Edit files
\common\config\main-local.php
Configure the database correctly
\api\config\main.php
- Change the id from 'app-backend' to 'app-api'
- Remove the controllerNamespace
- Change the modules to:
'modules' => [ 'v1' => [ 'basePath' => '@app/modules/v1', 'class' => 'api\modules\v1\Module' ] ], 
- Add the the components:'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ] ], 'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ [ 'class' => 'yii\rest\UrlRule', 'controller' => 'v1/artist', 'tokens' => [ '{id}' => '<id:\\w+>' ], 'extraPatterns' => [ // 'GET alive' => 'alive', ], ] ], ]
\api\config\main-local.php
- Change $config to $config = [];
\api\modules\v1\controllers\ArtistController.php
Change the file to:
<?php
namespace api\modules\v1\controllers;
use yii\rest\ActiveController;
/**
 * Artist Controller API
 *
 * @author Unknown
 */
class ArtistController extends ActiveController
{
    public $modelClass = 'api\modules\v1\models\Artist';
 // Default actions
 // GET /artists: list all artists
 // HEAD /artists: show the overview information of artist listing
 // POST /artists: create a new artist
 // GET /artists/AU: return the details of the artist AU
 // HEAD /artists/AU: show the overview information of artist AU
 // PATCH /artists/AU: update the artist AU
 // PUT /artists/AU: update the artist AU
 // DELETE /artists/AU: delete the artist AU
 // OPTIONS /artists: show the supported verbs regarding endpoint /artists
 // OPTIONS /artists/AU: show the supported verbs regarding endpoint /artists/AU.
 public function actions()
 {
        $actions = parent::actions();
 // Possibility to unset default actions
        // unset($actions['index']);
        return $actions;
 }
 // Define custom actions
 // public function actionAlive()
 // {
 //     return new ActiveDataProvider([
 //         'query' => Proxy::find()->where(['Alive' => 1]),
 //         'pagination' => false,
 //     ]);
 // }
}
\api\modules\v1\models\Artist.php
Use GII to generate your model.
More information: http://www.yiiframework.com/doc-2.0/guide-start-gii.html
Make sure that the use and the namespace is correct:
namespace api\modules\v1\models; use \yii\db\ActiveRecord;
\api\modules\v1\Module.php
Change the file to:
<?php
namespace api\modules\v1;
class Module extends \yii\base\Module
{
    public $controllerNamespace = 'api\modules\v1\controllers';
    public function init()
    {
        parent::init();
    }
}
\api\web\.htaccess
Change the file to:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
\api\web\index.php
<?php
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');
require(__DIR__ . '/../../common/config/bootstrap.php');
$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../../common/config/main.php'),
    require(__DIR__ . '/../../common/config/main-local.php'),
    require(__DIR__ . '/../config/main.php'),
    require(__DIR__ . '/../config/main-local.php')
);
$application = new yii\web\Application($config);
$application->run();
\common\bootstrap.php
Add to the file:
Yii::setAlias('api', dirname(dirname(__DIR__)) . '/api');
4. Test
Navigate to: http://localhost:8080/Music%20api/advanced/api/web/v1/artists
Expected result:
<response> <item> <Id>31</Id> <Name>Mampi Swift</Name> </item> <item> <Id>32</Id> <Name>Psion</Name> </item> <item> <Id>33</Id> <Name>Perfect Combination</Name> </item> </response>
 
No comments:
Post a Comment