>[danger] 本篇内容非常重要,务必加深理解!
[TOC]
### 后端代码
~~~
public $enableCsrfValidation = false;
public function actionCreate()
{
if (Yii::$app->request->isPost) {
$name = $_POST['name'];
$city = $_POST['city'];
$province = $_POST['province'];
# 写INSERT语句或使用下面的对象操作方法
$model = new Restaurant();
$model->name = $name;
$model->city = $city;
$model->province = $province;
$model->save();
return $this->redirect('index');
}
return $this->render('create');
}
~~~
### 后端验证
>[info] 验证要求:三个字段均不为空,且餐馆名称不能大于5个汉字。
**更改数据库字段类型**
~~~
$this->alterColumn('restaurant', 'name', $this->string(5)->notNull());
$this->alterColumn('restaurant', 'city', $this->string()->notNull());
$this->alterColumn('restaurant', 'province', $this->string()->notNull());
~~~
**重新生成Model**
~~~
yii gii/model --tableName=restaurant --modelClass=Restaurant --ns=common\models
~~~
**实现后端验证**
~~~
public function actionCreate()
{
$model = new Restaurant();
if (Yii::$app->request->isPost) {
$name = $_POST['name'];
$city = $_POST['city'];
$province = $_POST['province'];
$model->name = $name;
$model->city = $city;
$model->province = $province;
if ($model->save()) {
return $this->redirect('index');
}
}
return $this->render('create', ['model' => $model]);
}
/* @var $model common\models\Restaurant */
<pre><?= json_encode($model->errors) ?></pre>
~~~
### 后端代码(第二版)
**修改前端提交参数名**
~~~
<input type="text" class="form-control" id="name" name="Restaurant[name]">
<input type="text" class="form-control" id="city" name="Restaurant[city]">
<input type="text" class="form-control" id="province" name="Restaurant[province]">
~~~
**重写后端代码**
~~~
public function actionCreate()
{
$model = new Restaurant();
if ($model->load(Yii::$app->request->post())) {
if ($model->save()) {
return $this->redirect(['index']);
}
}
return $this->render('create', ['model' => $model]);
}
~~~
### 探索
- load()函数何时返回true,何时返回false?返回true或false的时候,都做了什么工作?
- save()函数何时返回true,何时返回false?返回true或false的时候,都做了什么工作?
- 使用这样的模型绑定函数,有什么好处?