添加餐馆(二)
本篇内容非常重要,务必加深理解!
后端代码
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");
}
后端验证
验证要求:三个字段均不为空,且餐馆名称不能大于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=commonmodels
实现后端验证
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 commonmodelsRestaurant */
<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的时候,都做了什么工作?
- 使用这样的模型绑定函数,有什么好处?