Php Yii2高级模板-restapi

Php Yii2高级模板-restapi,php,.htaccess,api,rest,yii2-advanced-app,Php,.htaccess,Api,Rest,Yii2 Advanced App,我一直在关注一些在线教程,但我似乎不知道如何为Yii2创建restapi。我一直得到一个404页面未找到。这就是我到目前为止所做的: 文件夹结构: api - config -- api.php -- bootstrap.php - modules -- v1 --- controllers ---- UserController.php --- Api.php --- Module.php .htaccess index.php api/api.php <?php $params =

我一直在关注一些在线教程,但我似乎不知道如何为Yii2创建restapi。我一直得到一个
404页面未找到
。这就是我到目前为止所做的:

文件夹结构:

api
- config
-- api.php
-- bootstrap.php
- modules
-- v1
--- controllers
---- UserController.php
--- Api.php
--- Module.php
.htaccess
index.php
api/api.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/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();
我使用邮递员发送GET请求:
http://example.com/api/v1/users

http://example.com/v1/users
返回的
类app\api\modules\v1\api不存在

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

请试试这个

您的控制器名称是
UserController
您正在访问
api


尝试在
api
url

'class'=>'app\api\modules\v1\api'中访问用户,
api.php
Module.php
中的命名空间不匹配。已更改,但在使用
http://example.com/api/v1/users
。也发生了变化。
<?php

namespace app\api\modules\v1\controllers;

class UserController extends ActiveController
{

    public $modelClass = 'app\models\User';
}
<?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
    }
}
<?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
    }
}
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();
'modules' => [

    'user' => [
        'class' => 'dektrium\user\Module',            
    ],

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

],