1.建表语句
CREATE TABLE `users` (
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(50) NOT NULL DEFAULT '',
`user_pass` varchar(255) NOT NULL DEFAULT '',
`user_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
2.模型
models\Users.php
:
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Users extends ActiveRecord
{
//指定表名称
static public function tableName()
{
return 'users';
}
}
3.控制器
注意此时的控制是要继承ActiveController
了
class UserController extends ActiveController
{
public $modelClass = 'app\models\Users';
}
4.配置UrlRule,config/web.php
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule','controller' => 'user']
],
],
配置完成之后,访问http://localhost/yiiserver/web/index.php/users
默认是xml文档,其中有我们表的2条数据了。
如果我们要看user_id为1的:
http://localhost/yiiserver/web/index.php/users/1
5.设置响应格式
<?php
namespace app\controllers;
use yii\rest\ActiveController;
use yii\web\Response;
class UserController extends ActiveController
{
public $modelClass = 'app\models\Users';
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_JSON;
return $behaviors;
}
}
现在就返回的是JSON格式了。
6. 重写动作
public function actions()
{
$action = parent::actions(); // TODO: Change the autogenerated stub
unset($action['index']); //从所有动作中删除index
}
public function actionIndex(){
echo '重写index';
}
查看ActiveController
类的源码可以知道默认有几个动作,比如默认就有index
,我们要想自定义index
就必须在actions()
方法中删除。
7.POST数据
需要重写model的scenarios()
,models/Users.php
:
public function scenarios()
{
return [
'default'=>['user_name','user_pass']
];
}
表示可以对user_name和user_pass
2个字段进行插入或者修改。
控制器代码:
<?php
namespace app\controllers;
use yii\rest\ActiveController;
use yii\web\Response;
class UserController extends ActiveController
{
public $modelClass = 'app\models\Users';
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_JSON;
return $behaviors;
}
public function init()
{
$this->enableCsrfValidation = false;
}
}
发送一个post试试: