我们现在业务需求,就像问卷星那样,做web表单设计,后台自定义表单内容,有没有什么好的思路,现在毫无头绪呢
把所有表单转为数组,然后存放到数据库里就用一个字段.
根据你自己的需要再展开扩充
我也在做自定义表单功能。思路很模糊,要是用原生PHP写的话问题可能不大,但是用yii写的话,model类怎么动态增加属性,怎么增加属性的校验呢?
我会另外开贴问的详细点
我们现在业务需求,就像问卷星那样,做web表单设计,后台自定义表单内容,有没有什么好的思路,现在毫无头绪呢
把所有表单转为数组,然后存放到数据库里就用一个字段.
根据你自己的需要再展开扩充
我也在做自定义表单功能。思路很模糊,要是用原生PHP写的话问题可能不大,但是用yii写的话,model类怎么动态增加属性,怎么增加属性的校验呢?
我会另外开贴问的详细点
我知道有一个属性可以设置行样式,但是这个属性代表了全部行的样式
‘rowOptions’=>[‘class’=>’text-center’],//行样式
其实我就是想让某列居中,不希望全部居中! 请问小伙伴们,有招解决不?
有一个headerOptions 的属性,
http://www.yiichina.com/doc/api/2.0/yii-grid-column#$headerOptions-detail
你可以去看看~
追代码 从源头解决 yii2 我发现这些问题都是由 Options 来设置的
。。。。。。
求find() one() all()详细介绍
http://www.yiichina.com/doc/api/2.0/yii-db-query
http://www.yiichina.com/doc/api/2.0/yii-db-activerecord
文档类说明,自己看
跟踪源码去看,详细介绍都写在那里了.
为什么我的表单提交前不能进行验证? 我想提交的时候有错误才能提交,现在是提交刷新才显示错误信息
有些验证是客户端能验证,比如required,当你用required的时候,yii会同时生成一段javascript用于客户端(浏览器)验证。
但是一些自定义的验证,不能生成对应的客户端验证,只能提交到服务器端验证。
表现出来的效果就是提交后才有错误提示
请问下使用gii生成代码时报错
Table Name
Table 'Country' does not exist.
在config/web.php里面是配置了多个数据库连接的,现在不知道怎么默认设置某一个数据库来进行gii生成
gii 上有一个Database Connection ID
的值,默认是db
,就是你web.php中配置的那个db
,你的多数据库应该不叫db
,叫什么,这个Database Connection ID
就填什么
没涉及到多库,不过你可以先只连接一个,用gii生成文件后再恢复多库
PHP刚学半年,yii2摸索了也有几个月了,。但有两个问题一直困扰我- –
在慕课网上和同学了解一点防范sql注入,xss攻击啥的,也没了解透。。就是照着做了几个例子。还了解了单例模式工厂模式什么的。然后他们会在用yii2做东西时,自己再写单例、工厂、自己写那几个防sql注入防什么攻击的函数进去。但我一直觉得没必要。。。故来求证下。
1,用yii2 输入框传过来的值 存入数据库、对数据库操作,还需要防范sql注入啥的嘛。因为我感觉噶- -,yii2作为这么吊的一个框架这些基本的安全问题 ,底层啥的肯定都已经考虑到这些问题了吧?
2,new 一个model的时候,还需要自己写单例模式嘛。。
求解
。。说实话,yii框架本身对post没有任何过滤的, \Yii::$app->request->post()
就是$_POST,看源码就知道了。不过你用框架自带的ar操作数据库,where条件不用字符串形式是会自己防sql注入的。使用框架自带的activeForm
来提交表单能防csrf攻击,所有显示用户输入内容的地方严格使用Html::encode
和HtmlPurifier::process
来过滤能防xss。
至于new model使用单例。。呵呵。
1、安全:YII确实已经做了防范,只要用yii给出的接收数据方法就能起到一定的安全防护作用。
如:
yii2接收post数据 \Yii::$app->request->post() ,方法会过滤或者转义一些字符, 但是也会有些人依然用原生的 $_POST[] 来获取,这样写就跟框架本身没什么关系,是搬码猿的问题。所以用YII自带的方法是有一定的安全作用的,不需要自己去写。
可能是人家想给看教程的同学讲解原理,才会自己写过滤方法, 不然你只知道YII安全,但是为什么安全?安全在哪里?有没有了解呢?
2、单例模式是为了节省系统资源,一个类只能实例化一个对象。最经典的就是 数据库连接类:程序执行一次,打开一个连接就够了。
在YII框架中自己写单例模式看情况而定,反正我是没写过。
人家的视频教程我觉得应该是要讲解原理的东西,而不是说让你们这样做。
当然 还有一种情况,你的水平极高,你发现yii框架过滤的不够安全,你可以自己写安全方法。
rbac修改auth_assignment表的user_id指定成admin表的admin_id,请教该如何做呢?
如果 admin_id
是 admin
表的主键,我想只要配置好 user
component 应该就行了吧?我没有验证,你试试看。
我希望的查询结果应该是这样的:
请教各位有什么好的思路或方法嘛?
补充一下:
我暂时是这样做的:
$query = $model::find();
$data = $query->where(['menu_parent'=>0])->orderBy('menu_position asc')->asArray()->all();
$i = 0;
foreach($data as $k=>$v){
if($v['menu_parent']!=0){
continue;
}
$level = $query->where(['menu_parent'=>$v['menu_position']])->asArray()->all();
array_splice($data,$k+1+$i,0,$level);
$i=count($level);
}
foreach($data as $k=>$v){
echo $k.'的值:'.$v['menu_name']."<br>";
}
有没有什么更好的方法?
你把menu_value定义为varchar,然后order by menu_value 就是按照你这个方式来排序了,1在2前面,所以,1-1 的记录也会在2前面
做菜单、或者分类树,可以用递归,给个父级ID做标识。
循环查询子级
都知道web文件夹下有个assets文件夹,每次打开网页的时候,assets文件夹下都产生很多文件。现在想把他部署到新浪云空间,做一个玩玩的网站。可是,新浪云空间不让写,写文件只可以在SAE_TMP_PATH目录下写。现在直观的想法有两个
或者还有第三种做法,就不部署在新浪云,咋滴,当然还不能这么任性。各位可有好的建议,谢谢啦。
这是我的做法记录。http://my.oschina.net/bubifengyun/blog/614555
Yii里的那些配置都是可以自定义目录的,文档里都有写
可以随便指定位置和名字
如:
在oracle中字段类型为varchar2(4000)写入数据没有超出上限
插入测试数据11122223333不长的不会报错,内容长了之后会报错 仅能绑定要插入 LONG 列的 LONG 值
这个是错误属于oracle的错误,实际上,你的长度确实超过了其能保存的长度
你的数据库字符集可能是UTF-8的,对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然表定义中为varchar2(4000),但是其实该字段的data_length为其2倍或3倍长。这种情况下oracle会把data_length长度超过4000的当做LONG型处理,所以报错。
你可以这样测试这个问题:
你说,插入测试数据11122223333不长的不会报错,内容长了之后会报错,你插入,4000/2-1的长度的字符串,看看会不会报错,然后,看看4000/2的字符串长度会不会报错,如果报错,再看看4000/3-1长度的字符串会不会报错,再看看4000/3的长度会不会报错
还有就是,明确指定绑定VARCHAR处理:参考php的文档:
http://php.net/manual/zh/function.oci-bind-by-name.php#92334
先尝试下吧
请问要是用 ActiveRecord 方式怎么保存成功呢?