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

用发展的眼光追技术

YII2 初来乍到 在 2013 年,2014 年 YII2 刚刚发布的年份,YII2 被大家追逐的原因大概是面向对象数据,包加载的扩展属性,自带 Gii 自动化生成工具,清爽的 View 界面和工具包...我们以 YII2 工程为例,官方推荐的 Advanced 模版中有一个公共工程 common 那我们是不是应该把项目中可以共用的数据层都放到 common 里? ?...YII2-模块.png 如上图,passport 和 admin 两个模块,如果都涉及同一张 User 表,依据复制优于依赖的原则,没有必要公用一个 User 类,可以单独存放为两个 User 类,用命名空间做隔离...更何况因为模块不一样,即使同一个数据表对象,相关的数据操作也会不一样。...总结 看看程序语言的发展脉络,以及前后端发展的变革,可以总结出两个词:演变和趋势。在应用程序开发中,前端这个职位是从后端细化和演变而来的,前后端分离和独立就是技术的趋势。

1.4K20

yii2开发中19条推荐实践

复用随时要想到(小挂件) 编码的原则是尽最大努力让代码复用,尤其是小挂件,它让视图层实现了复用,小挂件的使用非常简单 1、在@app下建立一个文件夹components 2、在components内建立一个挂件类...为视图的PHP代码增加一个try 在写action或模型方法的时候,为了保证代码的稳定性,我们一般都会用try....catch语法结构,但是在yii2的视图内很少有人用,记住,也要用!...使用迁移脚本 我说过了很多次,本篇还是要说一次,对于一个yii2程序的数据库部分请用migration来管理。 并且这些脚本应该一起放到到你的版本控制里,记住,迁移脚本一般包含两个部分。...另外在做迁移脚本的时候,如果你的表有前缀,那么在脚本里的写法如下 {{%user}}// discuz_user 时间问题 使用yii2开发mysql类web应用的时候,数据表的时间类字段我们喜欢用时间戳...当然从理念上说也有点不同 行为 一些类附加的属性 父类 一些类共同的属性 我的用法(不一定就是对的),尤其在模块中我喜欢为控制器增加一层父类。

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

    Yii2和thinkphp5中一个小差异造成bug

    考虑一个场景,一个函数需对相同表进行多次查询,多次查询中有部分查询条件相同。对于这种情况,Yii2和thinkphp5的实现方式要格外小心。...在Yii2中,可以直接使用clone 复用共同的查询条件,但是thinkphp5的话,必须把相同条件再重复写一次。 例如,需要查询总有效文章数,以及今日发布有效文章数。 Yii2 版本 ?...可以看出,clone model 之后,内部query其实还是同一个。虽然是在clone出来不同的两个model添加查询条件,但是最终都是添加在相同的query当做。...查看query对象的属性,只有builder,connection是对象,但是connection我们希望在整个请求中是一个单实例,所以没必要区分。...到此,对于一开始的使用场景,thinkphp5也可以使用clone完成 ? 在这其中有几点需要注意: 对象clone之后,其属性执行的是浅拷贝!!

    1K20

    Yii2 VS thinkphp5.0

    1、Yii2所有的操作都是对象操作。所有的对象都继承Yii中的Object对象。TP中,有对象也有函数。TP中的各个对象没有明显的继承关系。各自为类,定义不同的属性以及方法。...2、Yii2架构组织明确,同一类的对象必定有一个父类,在父类中定义相同的方法。在TP中,同一类对象没有什么继承关系,有的完全没有任何关系,内部提供的一些方法也不同。...YII2中,数据model时跟数据表完全映射的。一个model对象就是一条数据记录。对象的属性数据就是记录中各字段的内容。TP5中,数据model时一数据表的操作对象。提供一些数据操作方法而已。...Yii2中,new model(),然后调用save()方法,这个model就是一个完整的数据表记录,数据表的多有字段映射成为对象属性。TP中的save()方法是把记录写入数据库。然后就没了。...这里有个很大的问题就是写入数据库之后,当前model不具备数据表该记录的所有字段数据。 举个栗子:user表中有id,username,password,create_time,四个字段。

    2.2K20

    Yii2中的应用级布局

    开始应用级布局 在一个应用中多个控制器使用一个布局文件,那么可以在应用级配置文件config/web.php中设置yii/base/Application的$layout属性,代码如下: $config...> 嵌套布局实现页面渲染流程: 首先渲染视图文件article.php的内容,存储到布局文件reght.php的$content中。...因为在布局文件right.php 中使用了另外一个布局文件headerfooter.php,所以又把article.php和right.php两个文件的内容存储到headerfooter.php文件的$...,在Module类中定义了getViewPath()和setViewPath()方法,来获取和设置视图文件路径,代码如下所示: //所在文件路径vendor\yiisoft\yii2\base\Application.php...中并没有设施成员属性viewPath,但是使用viewPath成员属性时将自动调用_get()魔术方法间接调用getViewPath(),同理在设置viewPath成员属性时将自动调用_get()魔术方法间接调用

    1.2K20

    详解yii2实现分库分表的方案与思路

    然而1库1表的时候,tableName()返回是的order_info,于是理所应当的重载这个函数,提供一种动态变化的能力即可,例如: ?...无论选择哪种方案,我们都应该进一步改造tableName()函数,为database名称提供动态变化的能力,和table动态变化类似。 ?...假设分8张表,那么分别是00,01,02,03…07,然后决定分4个库,那么00,01表在00库,02,03表在01库,04,05表在02库,06,07表在03库,根据这个规律对应的计算代码如上。...database时候不存在报错),真实的库名是通过tableName()动态变化的。...总结 以上就是关于yii2实现分库分表的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

    1.8K30

    yii2使用Migrations为整个数据库表创建迁移

    例如,在应用开发的过程中,新建了一张表,在应用部署到生产环境后,发现需要为这张表创建一个索引以提升查询性能,等等。...我们先找到一个核心文件:/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php 创建迁移的视图文件:/vendor/yiisoft...类型,createIndex方法代码在:/vendor/yiisoft/yii2/db/Migration.php 468行) 数据表有用到外键的朋友,代码你们可能要自己手写一小段了,作者项目中未遇到外键所以代码没写...现在开始到视图模板(/vendor/yiisoft/yii2/views/createTableMigration.php):我们修改up方法里面的代码,这里能看到只有一个自增ID。...例如,在mysql类型中是:smallint 但我在Migrations中必须是 smallinteger 包括 bigint 也要改为 biginteger,目前我就发现这两个不一样,其他的暂时还没遇到

    1.9K31

    yii2反序列化后续

    昨天早上上班前,我无意间看到其它师傅们挖的yii2利用链,其中有一个是我之前忽略了的,就想着赶紧分享给大家,但是昨天恰了个饭(文末有福利),发不了文章,只有今天发了 这是一条利用__wakeup魔术方法作为入口的利用链...,原来是php版本问题,PREG_UNMATCHED_AS_NULL这个静态变量只在php7.2以上才有,而我用的是php7.1,所以升级一下,然后测试,结果 又报错了...如下 ?...我去查了一下,这个应该是yii的视图报错了导致无法回显命令执行的结果,所以,我利用dnslog来验证命令是否执行,如下: ? 可以看到命令成功执行了 poc1: yii2真是一个练习反序列化连挖掘的好靶场,我们可以通过它来练习各种魔术方法在反序列化链构造中的使用 php所有的魔术方法如下: __construct(),类的构造函数 __destruct()...__isset(),当对不可访问属性调用isset()或empty()时调用 __unset(),当对不可访问属性调用unset()时被调用。

    1.1K30

    系统化服务构建-软件工程分层

    业务领域模型 首先 Model 是一个业务领域概念,对应的业务模型,而非数据库字段或者说数据库字段的映射。这一点在 PHP 中被误解的尤其明显,大家都以为模型就是数据库的表映射。...为什么在 PHP 从业者眼中 Model 就代表着数据表,说白了就是 PHP 的项目业务简单到不足以启用领域模型相关的设计,进而我们可以思考 PHP 数据结构中惯用数组而非属性也是同样的道理。...我们以 YII2 工程为例,官方推荐的 Advanced 模版中有一个公共工程 common 那我们是不是应该把项目中可以共用的数据层都放到 common 里? ?...图4-YII2-模块.png 如上图,passport 和 admin 两个模块,如果都涉及同一张 User 表,依据复制优于依赖的原则,没有必要公用一个 User 类,可以单独存放为两个 User 类...更何况因为模块不一样,即使同一个数据表对象,相关的数据操作也会不一样。

    62210

    yii2实战之初见端倪PHP框架大PK安装yii2项目初始化配置服务小结

    PHP框架大PK php框架有很多种,在国内应用较多的有:Thinkphp, Yii, Laravel, Codeigniter等。关于这些框架,孰优孰劣,是一个极具争议性的话题。...本系列文章之所以选用yii2构建一个完整的应用,基于我最近在深入了解yii2,便将自己对于yii2的理解表达出来,希望能帮助那些想了解yii2的同学。如果你对yii2感兴趣,欢迎入坑。...我们下载的是高级模板,自带了前台与后台目录,因此需要设置两个域名,host配置如下: 127.0.0.1 frontend.test # 前台 127.0.0.1 backend.test #...; 在项目根目录新建log目录存放nginx日志, 不然会报错!...小结 本小节讲了如何安装配置yii2。下节将讲解yii2的控制器和视图是如何交互数据的。敬请关注...

    1.2K50

    Yii2中你可能忽略但很有用的两个方法batch&each 转

    为什么80%的码农都做不了架构师?>>> ? 我们的数据库常常都是很庞大的,一次查询的结果集也很大,这样很浪费内存,为了降低内存的使用率,我们可以使用yii2的batch和each方法。...为了让大家看的更明白,我们模拟一个场景,然后通过yii2的debug来查看all与batch/each方法下的内存使用情况。 开始准备 我们先建立一张表,它很简单。 ?...对比 为了方便,我们在视图里直接写循环体,如下面代码,你一定可以看懂。...果然,节省了一半的内存。...结果 当我们遇到需要一次读取出所有的或是大批量数据的时候,可以考虑使用batch和each,这一点点代码的优化帮你省掉了一半的内存。

    1.3K10

    Yii2工作中的一些方法技巧

    作为自己的周总结,平时遇到的问题,以及一不小心踩的坑,记录下来自己当复习: 表单验证 表单验证,两个参数中至少需要一个(2个以上): public function rules() {...给mysql数据库表添加字段后,立即使用这个字段时会出现未定义的情况(Getting unknown property) 原因:yii 对数据表结构进行了缓存。...'avatar_url']; // 输出内容: http://b.com/头像路径 } } Yii2-GridView 中让关联字段带搜索和排序功能 情境要求: 要在订单(Order)视图的...数据库结构 订单表order含有字段customer_id 与 客户表customer的id字段关联 首先确保在Order Model中包含以下代码: public function getCustomer...customer.customer_name', $this->customer_name]) ;//<=====加入这句 return $dataProvider; } 第三步: 修改order/index视图的

    3.3K31

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

    因此服务器端可以通过此字段是否为同一个域名来判断请求是否合法,因为客户自己做的网页发起的请求,其Referer为黑客网站。...在HTTP头部增加属性 这个方法在思路上和上面的token方式一样,只不过将token放到了HTTP头部中,不再参数传递,通过XMLHttpRequest类可以一次性的给所有请求加上csrftoken这个...HTTP头属性并设置值。...Yii2 首先要说的是每种CSRF防范措施都有其弊端,无论你的防范多么严密,黑客拥有更多的攻击手段,因此在重要逻辑上(必须写入和删除)必须非常小心,接下来我们把yii2框架在csrf上的部署说一下。...在CSRF这块,yii2框架采取了HTTP头部和参数token并行的方式,针对于每个请求,在beforeAction都会做一次判断,如下 // vendor/yiisoft/yii2/web/Controller.php

    2.5K60

    老话新谈之HANA连接

    举个栗子,假设我们的分析视图中有一个客户表或属性视图,该客户表或属性视图使用左外部联接配置到销售数据表。...INNER JOIN INNER JOIN只有在两个表中找到匹配的值时才会返回记录。...假定在同一个属性视图中没有查询列。但是,如果查询中包含属性视图中的列,则此连接将充当内部连接。 如果在属性视图中定义了过滤器,则即使未选择任何属性视图列,连接也将被包含并强制为内部联接。...这意味着只有在属性视图和分析视图基础表中找到匹配项时才会返回记录。这也意味着REFERENTIAL JOIN并不总是从信息模型执行计划中进行裁剪。...通常在分析视图基础表,在属性视图中没有匹配记录的情况下定义LEFT JOIN。即使缺少主数据或者说数据不完整,也能确保返回所有的数据。

    99220
    领券