为什么我的表单提交前不能进行验证? 我想提交的时候有错误才能提交,现在是提交刷新才显示错误信息
有些验证是客户端能验证,比如required,当你用required的时候,yii会同时生成一段javascript用于客户端(浏览器)验证。
但是一些自定义的验证,不能生成对应的客户端验证,只能提交到服务器端验证。
表现出来的效果就是提交后才有错误提示
为什么我的表单提交前不能进行验证? 我想提交的时候有错误才能提交,现在是提交刷新才显示错误信息
有些验证是客户端能验证,比如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框架过滤的不够安全,你可以自己写安全方法。
如题,请问yii2的assets bundle支持子域名访问吗?
配置 assetBundle 的 baseUrl
index.php入口是前台
admin.php是后台
两个是不同的Application
前台缓存保存Yii::$app->cache->set('my_name','test');
缓存放到同一个位置
我们现在业务需求,就像问卷星那样,做web表单设计,后台自定义表单内容,有没有什么好的思路,现在毫无头绪呢
把所有表单转为数组,然后存放到数据库里就用一个字段.
根据你自己的需要再展开扩充
我也在做自定义表单功能。思路很模糊,要是用原生PHP写的话问题可能不大,但是用yii写的话,model类怎么动态增加属性,怎么增加属性的校验呢?
我会另外开贴问的详细点
自己写了个布局文件mylayout.php,在视图里面定义$this->meun = 'xxx',
在mylayout.php中引用echo $this->menu报错, 什么原因 ? 试过在控制器里面定义变量menu了!
在对应的action中
在对应的视图和布局中,都可以这样获得:
其实你写的没错,主要是view对象没有menu属性。。title和params属性倒是有,所以没必要那么麻烦,照你自己的写法写$this->params['menu'] = 'xxx';布局里边用就行了
當我 config 設定 language = ‘en’;
-views(Folder)
--index.php
---en(Folder)
-----index.php
---zh-CN(Folder)
-----index.php
---zh-TW(Folder)
-----index.php
Controller :
`$this->render('index');`
會自動分配相對應的語系 en/index.php
============================================================================
-views(Folder)
--index.php <=== 移除後
---en(Folder)
-----index.php
---zh-CN(Folder)
-----index.php
---zh-TW(Folder)
-----index.php
Controller :$this->render('index');
將不到 index.php
除非我下 render(Yii::$app->language.'/index'); 以外
有甚麼辦法能
1.把 index.php 移除後
2.透過 $this->render('index');
3.render 到相對應的語系目錄下的 index.php
或者我的方法使用錯誤, 請給予指教!!
这个应该不用自己写这个判断吧,yii2会自己去匹配对应的语言包啊,直接放在message里,不就行了吗? 语言.php
index 自己作判断再转向相应的目录?
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做标识。
循环查询子级