Yii框架的增删改查

每一个框架增删改查会了也就入门了,现在让我们一起踏入Yii的殿堂
首先把我们的提交表单创建好,
//提交地址这里需要我们这样写(这里我提交到了add方法里)
<form action="index.php?r=hello/add" method="post">
提交表单会报400错误,提示 “您提交的数据无法验证”
原来是csrf验证的问题,因为表单是自己写的,在Yii框架中,为了防止csrf攻击,对post的表单数据封装了CSRF令牌验证。
解决办法关闭csrf验证
方法一、在配资文件中关闭
'components'=>array(        'request'=>array(            // Enable Yii Validate CSRF Token            'enableCsrfValidation' => true,        ),),

使用Yii表单生成页面的时候,如果表单的提交方式为POST,是都会在页面中添加一个隐藏字段,这个隐藏字段就是CSRF令牌验证字段
用户在提交表单的同时,将该字段提交给服务器端,Yii框架会将该有客户端提交过来的隐藏字段和客户端提交过来的Cookie中的YII_CSRF_TOKEN值进行比较。
相同则通过继续执行,不相同则会抛出400异常:"The CSRF token could not be verified."。
所以就出现了上面的问题,如果是自己写的表单,可以在视图页面的表单添加隐藏的令牌验证字段
方法二、在表单中增加隐藏的验证字段
<input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">

如果不想csrf验证就将方法一的true修改为false,这样YII就不会做post表单验证处理。
现在表单的问题解决完了


然后我们就可以在我们的控制器中接收提交的值了(顺便可以判断一下我们的CSRF验证是否通过)
public function actionAdd(){
    //我们使用Yii来接收值(这里记得use一下Yii所在的命名空间把Yii函数use出来)
    $obj = Yii::$app->request;
    //根据我们的传值方式选择要用什么方法来接受
    $arr = $obj->post();
    //判断一下我们的CSRF
    if(empty($arr['_csrf'])){
        echo "提交有错误";
    }else{
        unset($arr['_csrf']);

        //两种方法,对比自己选择合适的来用
       //使用全局变量YII的方法进行添加
       $db = Yii::$app->db;
        $data=$db->createCommand()->insert('text',$arr)->execute();

          //我们也可以用我们的模型来添加数据入库
         //$db = new Test;		//new出来模型
        //$db->name=$arr['name'];	//将数据整合
       //$db->pwd=$arr['pwd'];
      //$data = $db->save();		//执行添加

        if($data){
            echo "<script>alert('添加成功')</script>";
            //添加成功跳转到我们的展示页面(lists)
            $this->redirect('index.php?r=hello/lists');
        }else{
            echo "添加失败";
        }
    }
    }

成功后跳转到我们的展示方法里面
    public function actionLists(){
           //这里我们还是可以使用两种方法
          //        $db = Yii::$app->db;
         //        $sql="SELECT * FROM test";
        //        $arr = $db->createCommand($sql)->queryAll();
        //这次我们使用模型来查询我们的数据
        $db = new Test;
        //直接使用模型查询
        $arr = $db->find()->asArray()->all();
       //也可以自定义sql语句来让模型执行
       // $sql="SELECT * FROM test";
       //$arr = $db->findBySql($sql)->asArray()->all();
        //将查询到的数据赋值到视图层
        return $this->render('lists',$arr);
    }

看一下我们视图层的展示方法
就是普通的展示方法就行


然后是我的删除
public function actionDel(){
    //接收到要删除的id值
    $id = Yii::$app->request->post('id');
    //这里我们使用模型来处理(简单一些)
    $arr = Test::deleteAll("id=$id");
    echo $arr;
}



再修改一下就可以了
public function actionUpd(){
    //接收到要修改的id值
    $id = Yii::$app->request->post('id');
    //这里我们使用模型来处理(简单一些)
    //取到此id对应的一条数据
    $db = Test::find()->where("id=$id")->one();
    //像这样修改我们需要修改的字段值
    $db ->zt='1';
    //执行修改动作
    $db->save();
}


看了这么多是不是发现使用模型很简单啊,记住使用模型要根据模型所在的空间把模型use出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值