首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

yii2开发中19条推荐实践

中文化 默认安装yii2时,程序的相关信息是英文的,第一步我们需要改成中文的,很简单。...,但是有的时候输入并不会这样老实,我们需要进行更多验证,请不要将验证直接写到action内,比如上面代码中的if判断。...将验证的工作交给模型的rule和场景吧。一切。...为视图的PHP代码增加一个try 在写action或模型方法的时候,为了保证代码的稳定性,我们一般都会用try....catch语法结构,但是在yii2的视图内很少有人用,记住,也要用!...当然从理念上说也有点不同 行为 一些类附加的属性 父类 一些类共同的属性 我的用法(不一定就是对的),尤其在模块中我喜欢为控制器增加一层父类。

3.3K70

yii2的加密解密那些事儿

相关环境 操作系统及IDE macOS 10.13.1 & PhpStorm2018.1.2 软件版本 PHP7.1.8 Yii2.0.14 在yii2中,管理加密解密的库叫做Security,它以yii2...pbkdf2 使用标准的 PBKDF2 算法从给定的密码导出一个密钥。该方法可以用来进行密码加密,不过yii2有更好的密码加密方案 generatePasswordHash。...if($code == Yii::$app->request->get('code')){ } 上面的比较逻辑,两个字符串是从第一位开始逐一进行比较的,发现不同就立即返回 false,那么通过计算返回的速度就知道了大概是哪一位开始不同的...而使用 compareString 比较两个字符串,无论字符串是否相等,函数的时间消耗是恒定的,这样可以有效的防止时序攻击。...maskToken && unmaskToken maskToken用于掩盖真实token且不可以压缩,同一个token最后生成了不同的随机令牌,在yii2的csrf功能上就使用了maskToken,原理并不复杂

91820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    yii2开发后记

    yii的默认方法是index,可以在vender/yiisoft/yii2/base/Controller.php 中进行初始设置,也可以在控制器中改写defaltAction='action'。...model的属性定义是其核心,由于默认定义魔术方法get/set,所以可以直接在model外调用$modle->attr='value',对模型的属性进行获取/赋值。...规则设置 yii中对验证规则的定义,使用rules()方法可以一条定义多条规则,也可以根据不同的场景进行定义。外部验证时用$model->validate()方法来执行验证。...在安全模式下,要进行安全验证,即每一个属性都要在rules里验证,如果没有特定规则,也要添加'safe'验证。否则验证失败,存入数据库也会失败。...5.yii模型属性转数组 YII用toArray()方法可以将模型的属性转换为数组进行输出,可独立使用,也可以在查询时用连续操作方式使用。

    3.2K50

    Yii2验证器(Validator)用法分析

    验证器使用格式: 书写格式为:[需要验证的属性,验证器名称,验证器参数]。 如果需要验证的属性为多个可用数组,如果为一个属性可用字符串也可用数组来表示。...每个属性都可以有多个验证器,如上面的password使用了 required和string两个验证器。 常用验证器: Yii2已经内置了一些常用的验证器。...(yii\validators\ImageValidator) 判断比较: compare——比较 用来对两个属性值进行比较,如相等、大于、小于比较等。...(yii\validators\RequiredValidator) captcha——验证码 这个主要是在界面使用验证码的时候对验证码进行验证的。...现在核心的验证器有这么几类: BooleanValidator - 要求属性必须为Bool类型 CompareValidator - 完成两个属性的比较 DateValidator - 要求属性必须为日期类型

    2.9K31

    Yii2的MVC新特性

    废话就不多说了,下面来看看分别M-V-C这三个部分: 模型(Model): Yii之中的Models都继承与yii\base\Model,通常是用来存储数据并对这些数据设置一些特定的验证规则(rules...Yii2的Model验证,rules()函数具体担当为Model的每一个attributes进行过滤验证,而scenarios()则可以根据不同的场景需要来声明哪一个attributes是无需验证的(Which...field只分配给Model中的signup 场景(scenario),所以有关password的验证只在signup这个scenario起作用,个人觉得这个是Yii2的Model中一个很牛逼的升级,...因为这种机制的产生使得我们在开发的时候对一些attributes的验证和分配有了更灵活的掌控感,大大提高我们对表单可用性和场景化应用的设计开发。...没错,Yii2中已充分开始使用PHP命名空间,当初在Yii1.1的时候一直听说Yii2会使用更高级的PHP特性来完全重写,果然啊,点个赞。

    2.7K20

    Yii2 进阶篇

    修改表单模型 在验证中加入 maxFiles 配置表示最多可以上传多少个文件 修改表单模型的upload 方法 如果是多文件上传,这里的$this->imageFile 就会是一个数组,所以可以使用foreach...来进行文件保存 视图文件修改 需要传入多个文件,就需要在表单name属性加上[] 再加上multiple属性 ?...在视图中使用验证码 ?...使用widget()方法来调用验证码模块,并且指定显示的DOM结构 {image} 表示显示验证码图片 {input} 显示验证码输入框 验证验证码 验证码在填写完成之后,还需要使用验证机制来完成验证码的验证...,在Yii2中,不需要自己去写验证,直接在表单模型的 rules 中调用 captcha 验证就可以了 ['verifyCode','captcha'], 数据分页 Yii2也提供了类似于TP的数据分页类

    2K31

    Laravel 参数验证的疑与惑

    然后在AppServiceProvider中重新绑定新的验证器工厂创建类; 二,AppServiceProvider中通过resolver方法设置工厂类的resolver属性,接管验证器的实例化,例如:...验证器在验证参数的过程中,如果找到匹配的验证规则,则直接进行验证。否则调用魔术方法__call查找扩展验证函数。扩展函数返回布尔值,返回true则表示验证通过,返回false表示验证失败。...message方法,用于提供验证失败的错误提示信息。 使用自定义验证类,相对于extend方法扩展有一个很大的bug就是无法在自定义类中获取到当期的验证器对象。...从而导致在当前扩展的验证规则中,只能过获取到需要验证的数据,而获取不到其他的字段数据,无法进行联合字段的验证。像上面比较两个字段的大小的验证规则就无法实现。...如果想要通过自定义验证规则类实现上面两个字段大小比较的验证规则,则需要自定义验证类,修改validateUsingCustomRule方法,将当期验证器传入到自定义验证规则实例对象中去。

    3.4K00

    浅谈csrf攻击以及yii2对其的防范措施

    凡是我yii2学习社群的成员都知道,我不止一次给大家说构造表单100%使用yii2的ActiveForm来实现,这除了能和AR更好结合外就是自动生成csrf隐藏域,一个非常安全的举措。...CSRF防御方案 基于CSRF攻击特点,在业界目前防御 CSRF 攻击主要有三种策略: 验证 HTTP Referer 字段; 在请求地址中添加 token 并验证; 在 HTTP 头中自定义属性并验证...比如在请求前生成一个token放到session中,当请求发生时,将token从session拿出来和请求提交过来的token进行对比,如果相等则认证通过,否则拒绝。...getCsrfToken() 生成具体的csrfToken,就是你在表单隐藏域中看到的那个值,这个值将来会传到服务器和真实的csrfToken进行对比,验证是否合法。...validateCsrfToken() 进行合法性验证,该函数得到一个真实的csrfToken然后和客户端上传来的csrfToken进行对比。

    2.5K60

    Yii2 速查表

    视图相关 渲染一个视图(如果布局有效则使用布局) $this->render('index',['model'=>$model]) 渲染视图(不使用布局) $this->renderPartial...$file = UploadedFile::getInstance($model,'avatar') 通过模型的属性来获取一组文件 $files = UploadedFile::getInstances...基本用法 使用Query Builder需要使用的类 $query = (new \yii\db\Query()); // yii2使用Query对象来采集SQL的各个部分,然后由Query Builder... # 模型 在验证Model属性之前触发 Model::EVENT_BEFORE_VALIDATE 在验证Model属性之后触发 Model::EVENT_AFTER_VALIDATE...可以使用缓存的版本。 400: 错误的请求。可能通过用户方面的多种原因引起的,例如在请求体内有无效的JSON 数据,无效的操作参数,等等。 401: 验证失败。

    1.8K40

    yii2中自定义验证规则rules以及rules失效的解决方案

    先来说说场景: 条件:①、有两个字段分别是A和B ②、A有两个值分别是1和2 需求是:当用户选择的A的值等于1的时候,B的值必须填写,当A的值等于2的时候,B的值不写也没关系。其中A必选。...以上只是举了一个简单的例子,可以根据具体需求应用。 注意项: 在当前例子中,如果B字段的值为空或者已经在其他验证中失败时,我们自定义的rules规则不会生效。...validate之后打印$model->erros看提示信息 确保该值为真,否则失效,除非强制非真有效 另需要提醒的是: 自定义的验证方法不支持客户端校验,也就是说鼠标失去焦点后不会自动校验,只有在表单提交后才会校验...如果你想实现表单失去焦点就对数据进行校验的话,还是建议ActiveForm开启AJax校验吧 注意: 问1、自定义的验证方法requiredByASpecial($attribute, $params)...答1、 $params 实际上是yii\validators\InlineValidator的属性,你可以在规则上添加params属性,比如 ['id', 'customFunction', 'params

    3.1K51

    Yii2 VS thinkphp5.0

    但是从目前对tp5一周的使用时间来看,tp5相对于yii2来说,确实是弱爆了。 1、Yii2所有的操作都是对象操作。所有的对象都继承Yii中的Object对象。TP中,有对象也有函数。...TP中的各个对象没有明显的继承关系。各自为类,定义不同的属性以及方法。 2、Yii2架构组织明确,同一类的对象必定有一个父类,在父类中定义相同的方法。...think\Controller中提供一个validate的方法进行数据验证,但是think\Controller\Rest 中没有这个方法。同时,还有一些其他方法也不同。 3. ORM的不同。...YII2中,数据model时跟数据表完全映射的。一个model对象就是一条数据记录。对象的属性数据就是记录中各字段的内容。TP5中,数据model时一数据表的操作对象。提供一些数据操作方法而已。...Yii2中,new model(),然后调用save()方法,这个model就是一个完整的数据表记录,数据表的多有字段映射成为对象属性。TP中的save()方法是把记录写入数据库。然后就没了。

    2.2K20

    从配置文件的角度去了解Yii2

    Yii2为了简化开发难度,所以用户定义的目录加载方式全部使用Yii2自己定义的autoload方法(Yii.php中注册的BaseYii.php中的autoload),而不是编辑composer.json...在common级别中,设置的是站点的root.在site中设置的是module的root. 1. config/main.php main里面有比较多的设置项. 0....'controllerNamespace' 站点下(非module中)controller的命名空间,在MVC阶段,Yii2.0会根据这个属性结合路由自动生成controller的命名空间.module...在Yii2中会对部分component内置好'class'字段的配置,也就是说,作为开发人员,你不需要知道这个component对应的对象在哪里,直接配置后使用就可以了.当然如果自己写的话必须指定component...Yii2的DI和对象模型,后续文章详细介绍.文章在这里 7.

    1.5K21

    Yii2中的应用级布局

    首先我们介绍一下Controller类的render()方法的执行流程,需要查看vendor\yiisoft\yii2\base\Contorller.php文件中的render()方法源代码。...layoutFile, ['content' => $content], $this); } return $content; } } 分析render()方法源代码,画一个比较直观的流程图...开始应用级布局 在一个应用中多个控制器使用一个布局文件,那么可以在应用级配置文件config/web.php中设置yii/base/Application的$layout属性,代码如下: $config...因为在布局文件right.php 中使用了另外一个布局文件headerfooter.php,所以又把article.php和right.php两个文件的内容存储到headerfooter.php文件的$...中并没有设施成员属性viewPath,但是使用viewPath成员属性时将自动调用_get()魔术方法间接调用getViewPath(),同理在设置viewPath成员属性时将自动调用_get()魔术方法间接调用

    1.2K20

    yii2 modal弹窗之ActiveForm ajax表单异步验证

    前面我们讲述了yii2中如何使用modal以及yii2 gridview列表内更新操作如何使用modal的问题,本以为modal要告一段落可以开始新的话题了,但是实际问题往往超乎想像,这不modal弹窗提交的表单说是怎么验证的问题又出来了...yii2中,ActiveForm默认做了客户端验证,但是表单的提交,却不是无刷新的。也就是常常看到的表单提交后页面会刷新。...,该操作是表单字段失去焦点时异步验证,同时如果直接提交表单,也会先执行该操作进行验证 public function actionValidateForm () { Yii::$app->response...yii2异步无刷新表单验证了!...一般而言,上面的操作没有问题,但是总是会有特殊的人遇到特别的问题,问题突出,我们下面以一个案例进行说明: 有小伙伴遇到要验证的字段是unique类型,更新操作的时候,这可傻了眼了,怎么都处理不好了,我们下面给出一个针对字段

    1.5K21

    从配置文件的角度去了解Yii2

    Yii2为了简化开发难度,所以用户定义的目录加载方式全部使用Yii2自己定义的autoload方法(Yii.php中注册的BaseYii.php中的autoload),而不是编辑composer.json...在common级别中,设置的是站点的root.在site中设置的是module的root. 1. config/main.php main里面有比较多的设置项. 0....'controllerNamespace' 站点下(非module中)controller的命名空间,在MVC阶段,Yii2.0会根据这个属性结合路由自动生成controller的命名空间.module...在Yii2中会对部分component内置好'class'字段的配置,也就是说,作为开发人员,你不需要知道这个component对应的对象在哪里,直接配置后使用就可以了.当然如果自己写的话必须指定component...Yii2的DI和对象模型,后续文章详细介绍.文章在这里 7.

    97131
    领券