我已经在线学习了一些教程,但我似乎无法弄清楚如何为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
我对配置和文件做了一些更改,但没有运气。这是我最干净的版本。
答案 0 :(得分:0)
请尝试
您的控制器名称为UserController
并且您正在访问api
尝试访问api
网址中的用户