为了账号安全,请及时绑定邮箱和手机立即绑定

Yii框架不得不说的故事—基础篇(1)

withy PHP开发工程师
难度中级
时长 2小时39分
学习人数
综合评分9.67
176人评价 查看评价
9.9 内容实用
9.7 简洁易懂
9.4 逻辑清晰
  • HelloController.php //数据模型之单表添加数据 //增加数据 $test = new Test;//实例化Test模型并保存在$test变量中 //id和title字段可以预先在保存之前通过属性的方式赋值 $test->id = 3; $test->title = 'title3'; //在保存数据的时候,这些数据是用户发送的请求当中获取的,保存前需要进行数据的合法性验证,Test模型里有专门的函数验证。 $test->validate();//保存数据之前调用validate()方法启用验证器rules()去判断id和title符不符合保存的条件 if ($test->hasErrors()) { echo 'data is error!';//如果发生校验错误,说明数据不合法。 die;//结束掉程序,不让它保存 } $test->save();//调用save()方法把它转化为一条数据并保存在表单中 basic/models/Test.php //数据模型之单表添加数据 //通过rules()函数验证保存前数据的合法性 public function rules(){ //返回一个数组,在数组里对每一个字段进行验证 return[ ['id','integer'],//Yii提供了一个验证器(每个验证器都是一个类)的东西,比如integer验证器。 ['title','string','length'=>[0,5]] ]; }
    查看全部
  • //数据模型之单表删除 //删除数据,先取出要删除的数据 /*$results = Test::find()->where(['id'=>1])->all(); $results[0]->delete();//调用delete()方法就可以删除第一条数据*/ //删除数据有个更快捷的方式:调用控制器当中的deleteAll()方法把整个表里的数据删掉;同时这个方法里也可以带上查询条件指定删除哪部分的数据。 //Test::deleteAll('id>0'); Test::deleteAll('id>:id',array(':id'=>0));//deleteAll也支持占位符的功能
    查看全部
  • //这样写代码不是太简洁,所以Yii框架对findBySql()直接运行sql的方式进行了一些改装(把where查询条件改装成一个数组) //id=1的数据查询,要想使用数组查询需通过Test活动记录里的find()方法,这个方法会返回一个对象,再通过where()方法加上查询条件 //$results = Test::find()->where(['id'=>1])->all(); //id>0 //$results = Test::find()->where(['>','id',0])->all(); //id>=1 and id<=2 /*$results = Test::find()->where(['between','id',1,2])->all(); print_r(count($results));*/ //title like "%title1%” //$results = Test::find()->where(['like','title','title1'])->all();//显示1条数据,包含title1的 /*$results = Test::find()->where(['like','title','title'])->all();//显示包含title的所有数据 print_r(count($results));*/ //查询很多数据时,这些数据一下子从数据库拿到内存当中,内存可能会扛不住。Yii框架针对这种情况也做了一些优化(两种形式)。 //第一种:查询结果转化为数组(对象占用内存高于数组),Yii提供了asArray()方法。 $results = Test::find()->where(['between','id',1,2])->asArray()->all(); //第二种:批量查询(每次规定拿n条数据放进内存中,处理完之后再去拿n条数据,内存始终保持着n条数据的占有量);batch()每次拿多少条记录,拿完放到一个变量当中。 /*foreach (Test::find()->batch(1) as $tests) { print_r(count($tests)); }*/ print_r($results);
    查看全部
  • //防sql注入,findBySql提供了一种占位符(:name[冒号+名字])的方式, $sql = 'select * from test where id=:id';//占位符:id加在Sql语句后面 //$results = Test::findBySql($sql,array(':id'=>1))->all();//通过findBySql的第2个参数array(把占位符换成用户请求发送过来的真实的值)把用户数据塞进sql里,占位符的方式会把用户传递过来的值(1 / 1 or 1=1)作为一个整体去处理,能运行就运行,不能运行就报错。 $results = Test::findBySql($sql,array(':id'=>'1 or 1=1'))->all(); print_r($results);
    查看全部
  • //sql注入:有时候sql语句不是直接写出来的,需要用户传递过来的数据进行配合,比如说从浏览器提交过来的id=1。 $id = '1 or 1=1';//假如用户提交过来的数据包含了一些特别的字符 $sql = 'select * from test where id='.$id;//那么$id和select语句拼接的结果为:select * from test where id=1 or 1=1;where条件始终为真的,那么查询的结果就是select * from test,也就是把test表里的数据都查询出来。 $results = Test::findBySql($sql)->all(); print_r($results);
    查看全部
  • HelloController.php use app\models\Test $sql = 'select * from test where id=1';//以前是直接运行sql语句来查询数据 //在活动记录里也对这种方式提供了良好的支持,提供了一个静态方法findBySql(),继承于父类,可以直接运行sql语句,也对sql注入有很好的防范支持。 $results = Test::findBySql($sql)->all();//运行sql语句,之后会返回一个对象,再调用对象里的all()方法,就可以把查询到的结果返回出来。all()方法返回数据时,会把每条记录都包装成一个对象,再把这些对象放进一个数组里,最后把数组给返回出去。 print_r($results);
    查看全部
  • 数据模型: 1,和表名一致的文件; 2,引入命名空间:namespace app\models; 3, 使用命名空间:use yii\db\ActiveRecord; 4, 创建与表名一致的类并继承ActiveRecord; class tablename extends ActiveRecord{}
    查看全部
  • 在视图中显示的数据一般会预先存储在数据库当中,Yii框架中为了方便到数据库中取(增删改查)这些数据,提供了一种数据模型的东西。Yii要想操控test这张表,必须知道test这张表在哪个数据库,数据库的地址在哪里,Yii框架专门提供了一个配置文件(basic/config/db.php)给我们。 advanced版的在common/main-local.php
    查看全部
  • 1.加个with()将会关联自动查询: $customers=Customer::find()->with('orders')->all(); 以上语句执行的SQL: (1)select * from Customer; (2)select * from order where customer_id in(...); 2.循环执行一次: foreach($customers as $customer){ $orders=$customer->orders; }
    查看全部
  • (1)ClassName()方法是ActiveRecord中的一个静态方法 (2)代码的封装:在ActiveRecord中专门写一个函数
    查看全部
  • 快捷方法one()获取数组中的一个数据
    查看全部
  • HelloController.php //视图之数据块 //return $this->render('home'); return $this->render('about'); common.php <!-- 视图之数据块:要想显示数据块的内容,可以通过$this也就是视图组件里的blocks数组去找刚刚定义的block1数据块。 --> <!-- <h1>hello Common</h1> <?//=$this->blocks['block1'];?> <?//=$content;?> --> <!-- 假如在about视图没有定义block1数据块,无法覆盖布局文件中的h1标签里的内容,那么希望还是使用布局文件common.php里的h1标签的内容 --> <?php if(isset($this->blocks['block1'])):?> <?=$this->blocks['block1'];?> <?php else:?> <h1>hello Common</h1> <?php endif;?> <?=$content;?> home.php <!-- 视图之数据块,在视图文件里定义一些数据,覆盖掉布局文件里h1的内容。有点像面向对象里的覆盖方法,子类定义了新方法可以覆盖父类原来的方法 --> <!-- 要完成这种功能,Yii框架提供了一种数据块的方式,先定义数据块(视图组件) --> <?php $this->beginBlock('block1');?> <!-- 给数据块取名为block1 --> <h1>change by home</h1> <?php $this->endBlock();?> <!-- endBlock不需要传递参数 --> about.php <!-- 视图之数据块 --> <!-- <?//php $this->beginBlock('block1');?> <h1>change by about</h1> <?//php $this->endBlock();?> -->
    查看全部
    0 采集 收起 来源:视图之数据块

    2018-03-22

  • 修改流程图
    查看全部
  • 添加数据: helloController.php文件: $test = new Test;//实例化数据模型Test $test->id = 3; $test->title = 'title3'; $test->validate();//验证器,验证字段是否合法 if($test->hasErrors()){ echo 'data is error';//字段不合法 die; } $test->save(); //添加数据以及数据验证 // $test=new Test; // $test->id=6; // $test->title="Title531231231"; // //数据验证,验证器,验证字段是否合法 // $test->validate(); // if($test->hasErrors()){ // echo 'data is error'; // die; // } // $test->save(); //修改单表数据 $test=Test::find()->where(['id'=>4])->one(); $test->title='title4444'; $test->save();
    查看全部
  • 增加流程图:
    查看全部

举报

0/150
提交
取消
课程须知
学习本门课程之前,建议先了解一下知识,会更有助于理解和掌握本门课程 1、掌握PHP基本的语言语法 2、对MVC开发方式有一定的了解
老师告诉你能学到什么?
1、php的新特征 2、一款前沿的框架的使用方式 3、新颖独到的程序设计

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!