Yii2高级模板 - Rest API

时间:2016-05-21 13:10:20

标签: php .htaccess api rest yii2-advanced-app

我已经在线学习了一些教程,但我似乎无法弄清楚如何为Yii2创建REST API。我一直在v[0]。这就是我到目前为止所做的:

文件夹结构:

404 page not found

API / api.php

api
- config
-- api.php
-- bootstrap.php
- modules
-- v1
--- controllers
---- UserController.php
--- Api.php
--- Module.php
.htaccess
index.php

API / bootstrap.php中

<?php

$params = require(__DIR__ . '/params.php');

$config = [
    'id' => 'api',
    'basePath'  => dirname(__DIR__).'/..',
    'bootstrap'  => ['log'],

    'components'  => [
        // URL Configuration for our API
        'urlManager'  => [
            'enablePrettyUrl'  => true,
            'showScriptName'  => false,

            'rules' => [
                [
                    'class'  => 'yii\rest\UrlRule',
                    'controller'  => [
                        //'v1/user'
                        'users' => 'v1/users'
                    ],
                ]
            ],

        ],

        'request' => [
            // Set Parser to JsonParser to accept Json in request
            'parsers' => [
                'application/json'  => 'yii\web\JsonParser',
            ]
        ],

        'cache'  => [
            'class'  => 'yii\caching\FileCache',
        ],

        // Set this enable authentication in our API
        'user' => [
            'identityClass'  => 'app\models\User',
            'enableAutoLogin'  => false, // Don't forget to set Auto login to false
        ],

        // Enable logging for API in a api Directory different than web directory
        'log' => [
            'traceLevel'  => YII_DEBUG ? 3 : 0,
            'targets'  => [
                [
                    'class'  => 'yii\log\FileTarget',
                    'levels'  => ['error', 'warning'],
                    // maintain api logs in api directory
                    'logFile'  => '@api/runtime/logs/error.log'
                ],
            ],
        ],

        'db'  => require(__DIR__ . '/../../config/db.php'),
    ],

    'modules' => [
        'v1' => [
            'basePath' => '@api/modules/v1',
        'class' => 'api\modules\v1\Api',
        ]
    ],

    'params'  => $params,
];

return $config;

API /模块/ V1 /控制器/ UserController.php

<?php
    Yii::setAlias('api', dirname(dirname(__DIR__)) . '/api');

API /模块/ V1 / Api.php

<?php

namespace app\api\modules\v1\controllers;

class UserController extends ActiveController
{

    public $modelClass = 'app\models\User';
}

API /模块/ V1 / Module.php

<?php

namespace api\modules\v1;

use \yii\base\Module;

class Api extends Module
{
    public $controllerNamespace = 'api\modules\v1\controllers';

    public function init()
    {
        parent::init();

        // custom initialization code goes here
    }
}

API / htaccess的

<?php

namespace api\modules\v1;

class Module extends \yii\base\Module
{
    public $controllerNamespace = 'api\modules\v1\controllers';

    public function init()
    {
        parent::init();
        \Yii::$app->user->enableSession = false;
        // custom initialization code goes here
    }
}

API / index.php的

Options +FollowSymLinks
IndexIgnore */*

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . 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__ . '/config/bootstrap.php'); $config = require(__DIR__ . '/config/api.php'); $application = new yii\web\Application($config); $application->run(); 已启用

不确定还需要从这里做些什么。我也将此添加到mod_rewrite

common/config/main.php

我使用Postman发送GET请求: 'modules' => [ 'user' => [ 'class' => 'dektrium\user\Module', ], 'v1' => [ 'basePath' => '@api/modules/v1', 'class' => 'api\modules\v1\Api', ] ],

http://example.com/api/v1/users返回http://example.com/v1/users

我对配置和文件做了一些更改,但没有运气。这是我最干净的版本。

1 个答案:

答案 0 :(得分:0)

请尝试

您的控制器名称为UserController 并且您正在访问api

中的用户

尝试访问api网址中的用户