• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 分享Laravel模型使用的2个小技巧

分享Laravel模型使用的2个小技巧

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了Laravel,模型使用,小技巧等相关知识,希望对您有所帮助

下面给大家分享Laravel模型使用的2个小技巧 ,希望对需要的朋友有所帮助!


分享Laravel模型使用的2个小技巧


引言

本文说说模型的修改器,以及模型的职责。

修改器

有没有这样一种用法:使用表单获取一个字段的输入,使用加密算法,或者摘要方式对字段处理后存入数据库,这在数据库密码字段是常用的处理手段。

如果写操作在程序内到处都是,零散地分布在业务代码的各个地方,我们总不至于每次都要写一次相同的代码吧?

相同的业务逻辑,提取出来,抽象出来,只写一次,这才是高效代码的王道。

laravel这个注重设计模式的现代化框架,自然是不会做无用功。于是对应读取器,就有了修改器,专门用于写入数据库时起作用。

比如对于写操作,某个字段的值写入,默认使用 bcrypt 方法加密之后存入数据库。

class User extends Model {    public function setPasswordAttribute($password)    {        $this->attributes['password'] = bcrypt($password);    }}

上述方法调用模型的 $attributes 属性,并使用自定义方法改写,在使用 ->password 属性进行赋值后,就会调用该方法的代码并执行。

我们仍然在 tinker 内进行演示:

$user = new User;$user->password = 'blah';echo $user->password;// 输出 $2y$10$e3ufaNvBFWM/SeFc4ZyAhe8u5UR/K0ZUc5IjCPUvOYv6IVuk7Be7q


自定义方法

框架独立出来模型这个数据库操作层的目的,就是为了把数据操作全部集中到模型内完成,以便可以全局统一,规范地编写代码。

下面举个例子,说明一下哪些逻辑应该放在模型层操作。比如有一个视图文件内的一个展示片段:

@if ($event->started_at->isToday())    This event is occurring today!@endif

其中 $event 是模型 Event 对象的一个实例,start_at 方法是模型的一个属性,也是数据库表的一个字段。按照之前章节的介绍,我们对其使用了访问器的方法,自动在读取的时候使用 Carbon 类返回一个实例化对象。所以上面的代码片段可以使用 isToday() 这个 Carbon 类的方法。

但是在模型层面进行类库方法的调用,有些单独,且零散。假如有些API接口要使用此方法格式化,或者别的页面也要重用这个方法,显然放在模型内更为合适。

考虑在模型内添加以下代码:

class Event extends Model {    public function occurringToday()    {        return $this->started_at->isToday();    }}

声明一个public的公开访问的私有化方法,并操作对象的实例 $this的属性和方法。

那么上述的blade模板内的代码就可以更换如下:

@if ($event->occurringToday())    This event is occurring today!@endif

这样逻辑摘出来就清楚的多了。而且可维护性更强。为什么?因为假如后期我们业务出现变动,不再使用 start_at 字段进行判断,可以很容易地通过修改 occurringToday 方法而达成全局生效的目的。

这样的程序就很灵活了。

写在最后

本文描述了laravel模型内很常用的两个小技巧。

一个是修改器,让你不必每次在写入数据的时候,考虑如何转换,如何判断,不再写重复的啰嗦的代码;

一个是如何优化视图文件,以及如何权衡设计技巧,让模型做模型应该做的事情,尽量在代码内把职责划分清楚。

规范的设计,能让一个项目的代码更为健壮。



分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • laravel与thinkphp之间的区别与优缺点
  • 说说在Laravel中怎么执行Shell命令 ?
  • Laravel中用Observer事件致Redis队列异常问题
  • 手把手带你使用Vue + Laravel开发一个简单的 CRUD 应用
  • 分享个人推荐的Laravel或其它框架的编程规范
  • Laravel中三种中间件的作用
  • 解决Laravel使用laravel-excel扩展包(maatwebsite/excel)导入报错问题
  • 分享一个顺丰同城配送的扩展包并在laravel中使用
  • 介绍Laravel8路由模块新增missing方法
  • 解析如何进行Laravel表单验证分层设计和验证场景应用

相关文章

  • 2022-04-29浅谈Nodejs中的callback回调
  • 2022-04-29PHP中怎么解决serialize函数中文乱码的问题
  • 2022-04-29JavaScript判断一个对象是否为数组的几种方法(总结)
  • 2022-04-29ThinkPHP支持的四种URL模式:普通模式、PATHINFO、REWRITE和兼容模式
  • 2022-04-29phpcms后台上传不了图片怎么办
  • 2022-04-2933个非常实用的JavaScript一行代码,建议收藏!
  • 2022-04-29做seo排名时你的侧重点是什么
  • 2022-04-29PS广告创意设计实例——拼出来的艺术
  • 2022-04-29一起来聊聊JavaScript函数柯里化
  • 2022-04-29Photoshop制作超酷的岩石立体字教程

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • WordPress如何创建page页面并添加跳转链接
    • CDR制作冰块立体字
    • jquery怎么判断指定子元素是否存在
    • 如何利用PHP来输出一个杨辉三角
    • dedecms5.7技术:“更新数据库archives表时出错,请检查
    • 使用thinkphp3.2.3开发微信授权登录详细教程
    • Photoshop制作梦幻光点效果的艺术字教程
    • 在CSS中怎么给按钮添加背景图片(详解及实例)
    • 怎么解决phpStorm使用vue提示"Attribute v-xxx is not allowed here"的问题
    • PHP实现腾讯短网址生成api接口实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有