刘师傅
- 刘师傅 回答了问题 请教一个关于排序的问题
其实对于排序这个,我也是还不太明白,目前还是简单的用法,其中各个逻辑原理尚不明,主要感觉不是很重要,开发中没有多少需要这个,所以没有上心。呵呵,就是优先级不够呗!
- 刘师傅 2018-11-29 已签到连续签到4天,获得了20个金钱
- 刘师傅 回答了问题 求教表单是如何同控制器的方法关联的?
表单这个东西,我在文档上给你找了一段,其实差不多类似:
https://www.yiichina.com/doc/guide/2.0/input-forms
Yii2没有把视图和哪个提交地址绑定,这个还是原始HTML的表单知识,action还是你来写,爱咋写咋写,自古以来就是这样,不写的话默认就是当前的路由,这不是野路子:<?php $form = ActiveForm::begin([ 'id' => 'xxxxx_form', //这里使用了Url助手函数封装下而已,直接写也OK的。 'action' => Url::to(['/myserver/user', 'uid' => $uid]), 'layout' => 'horizontal', 'options' => ['class' => 'form-content'], 'method' => 'POST', 'fieldConfig' => [ 'horizontalCssClasses' => [ 'label' => 'col-xs-4 col-sm-4', 'wrapper' => 'col-xs-8 col-sm-8', ] ] ]); ?>
如果你想提交到dealwith()方法,这个有点难度,但是也不是不可能。
Yii2的控制器里一般包含两种方法:
一种是内联方法,类似这种actionXXXX()的,内联的最多;
还有一种是独立方法,这个需要使用【行为机制】,简单来说控制器里写个 actions()方法,看下这篇文档:
https://www.yiichina.com/doc/guide/2.0/structure-controllers#standalone-actions
其它再说。 请记住一句话:永远不要对浮点数做大小比较运算!
所以,不管哪个PHP框架,甚至哪种编程语言,mysql也不例外,对浮点数的比较操作都有这种问题,这都是其计算机底层对浮点数的实现:IEEE754
所以,一通百通,不要怪yii2框架,也不要怪php。这个标准有利有弊,自己见多了就识广了。- 刘师傅 回答了问题 请教如何对表单提交的数据进行过滤
Yii2的过滤和验证正如你上面所写的load()方法那样,是建立在【场景】机制下的管理操作。
$model = new User(); $model->setScenario(User::SCENARIO_CREATE);//设置场景 $model->load(Yii::$app->request->post()//根据场景填充数据到模型$model if ( $model->save()) { //根据场景进行过滤和验证,无误后入库 return "success"; } else { return $model->getErrors(); }
你可以花10分钟先读一篇这个文档,这里都是Yii2在model层进行输入验证和过滤起作用的地方:
https://www.yiichina.com/doc/guide/2.0/input-validationsql注入的问题,我觉得php各个框架都差不多,因为PDO在底层已经解决了一大部分这方面的问题。
各个框架的ORM都会有的。Yii2是AR,model;laravel就是eloquent类似。几乎不用担心SQL注入问题,除非自己坑自己。
建议把数据库部分看看,也许心里会有点感觉吧! - 刘师傅 2018-11-28 已签到连续签到3天,获得了15个金钱
- 刘师傅 2018-11-27 已签到连续签到2天,获得了10个金钱
- 刘师傅 2018-11-24 已签到连续签到20天,获得了20个金钱
- 刘师傅 2018-11-26 已签到连续签到1天,获得了5个金钱
one()就像它的名字一样,返回一条记录,它是yii2框架自己的语法;
limit是mysql数据库特有的语法,都是查询一条记录。
既然一个是框架的语法,一个是数据库的语法,所以它们各自在自己的世界毫不冲突地生活着。
one()的确是返回一条记录,这一点和limit(1)算是巧合了。但是这条记录一般是一维的,可以是一个AR模型或者普通对象。如果加上了asArray(),那么就是类似["name"=>"liushifu",'age'=>'66','sex'=>'man','hobby'=>'women']这样的。
limit是mysql数据库上的语法。可以取得范围的记录,比如limit(2,3)。limit(1)是常用的,返回一条记录。如果你不用one()而是使用了all()方法。$data = User::find() ->where(['id' => 100]) ->select('name') ->limit(1) ->all();//one()替换
那么它返回数组,但是它的格式是一个二维数组,是一个对象组成的数组。类似
$data[0]["name"=>"liushifu",'age'=>'66','sex'=>'man','hobby'=>'women'];
所以,我觉得他俩最大的区别就是格式问题,一个返回二维,一个返回一维的。
至于返回的这个【第一条】如何定义,什么范围limit(2,3),排序orderby等等的,都交给数据库语法来完成,确定好之后,如果是一维数据就用one(),二维数据就用all()。
咋样,明白不?