Laravel trait的使用
trait 是在PHP5.4中为了方便代码复用的一种实现方式,但目前我在看的的PHP项目中较少看的有程序员去主动使用这个实现方式,在laravel中有很多 trait 的使用,关于trait 在 laravel 的使用请参看 Laravel 在哪些地方用了 trait?
我曾在 Laravel 中大型项目面向对象架构 引用分享过一个他人的架构设计实践,在他的实践中大量使用了依赖注入。这是一种可行的方式,而同样的使用 trait 可以实现同样的功能,而且应用场景更多。
model 中使用
model是随着项目的推移会慢慢的变得肥大难以维护,因为传统的方式是将数据库访问逻辑都写在这里面,而 laravel 的模型里除了数据访问的逻辑还会有数据表之间的关联关系,访问器,修改器,监视的字段,白名单,黑名单等等。
而当一个模型在有了这么多东西后模型就会出现维护困难问题,当然数据访问可以通过 资源库模式(Repository)进行分离,但当项目已经有很多数据访问写在模型里使用资源库模式就是一个费力费时的改造工程。
而使用 trait 既可以实现代码分离又可以不用在逻辑层做任何处理。
我们只需要创建一个trait,将数据访问的所有方法全部移动到这个trait中,然后在原来的模型中 use 这个trait就可以了,这样就方便的实现了代码的分离。
同样的你可以将访问器,修改器分离,甚至是常常使用的模型定义,比如laravel的软删除就是用这种方式实现的,你可以自己定义一些常用的模型功能代码,比如内容的审核功能。
我的建议是将model放在models文件夹中,其他trait放在models中建立的文件夹中,这样就近的方便查找修改,比如我就将访问器修改器放在app/Models/Attribuite文件夹中,然后使用模型名类型名的驼峰命名文件。 比如 User 模型的访问器修改器我的文件路径就是app/Models/Attribuite/UserAttribute.php。
当然你可以分的更加细致,把访问器单独定义一个trait,修改器单独定义一个。
app/Models/Attribuite/UserGetAttribute.php app/Models/Attribuite/UserSetAttribute.php
Controller 中的使用
在laravel中有一个基类控制器里面已经有几个trait的使用了,比如认证,验证器,我们在使用基类控制器时候如果有较少的基类方法可以直接写在这个基类控制器里,当有很多的时候维护和查找他们也是一个麻烦事,这时候就可以用trait将他们分类出来。
而一些要复用的代码可能只在几个控制器里需要用到,这时候可以仅仅在这几个控制器里使用定义好的trait。
还有一种使用方式是控制器分离,当控制器中有越来越多方法时候,分离控制器中的方法也是必要的,一般的做法是新建一个控制器,然后将一些原来控制器中的方法移动过去,然后再去修改路由配置。用trait可以实现分离而不需要修改路由配置,新建一个trait将需要分离的方法移动过去,然后在原控制器中使用这个 trait 。
最新文章
- transition
- shell 命令集
- 按Right-BICEP要求的任务二的测试
- C++中rapidxml用法及例子
- Eqs (哈希)
- 你需要知道的九大排序算法【Python实现】之堆排序
- 加快XCode编译链接速度(200%+)—XCode编译慢液
- JavaBean,List,Map转成json格式
- [JZOJ5522] 图
- win10利用自带的IIS搭建ftp遇到瓶颈,离线求解!!!
- idea的一些好用的第三方插件
- Html5使用canvas作图线宽很粗
- ASP.Net 获取Form表单值
- OpencvSharp 在WPF的Image控件中显示图像
- SQL Server中的高可用性(3)----复制 (转载)
- codeforces水题100道 第十九题 Codeforces Round #109 (Div. 2) A. I_love_%username% (brute force)
- 聊聊WKWebView
- 数组(list)分组、分段
- (转)分布式中使用Redis实现Session共享(二)
- Oracle触发器修改数据时同步执行插入该条数据
热门文章
- 基于scrapy-redis两种形式的分布式爬虫
- Python Pymongo中Connection()与MongoClient()差异
- Linux中tail指令详解
- 私有成员的设置和访问方式——setter和getter
- [转] Nexus OSS 3.xx 体验
- Q138 复制带随机指针的链表
- CPU飚高问题排查基本步骤
- fiddler安装和使用
- 在Windows Server 2008 R2(x64)上安装.NET Framework 4.5 兼谈.NET Framework 4.0 “在服务器核心角色上不受支持”含义
- TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解)