前言
笔者是从今年开始接触Laravel框架的,在阅读了Lavarel的开发文档后,自己也写了一些小样例,同时也参与了基于Lavarel的项目开发。在对Laravel了解熟悉的过程中,渐渐无法自拔的迷恋上这个框架,他的某些设计和实现着实惹人喜爱。
在此推荐还不了解此框架的php爱好者可以去Laravel官网学习下,下面我将分享一点自己学习的心得和启发,希望可以和感兴趣的朋友多交流学习。
Lavarel样例分享
本篇虽然是Laravel的入门介绍,但此处并不会详细介绍Laravel中的概念。因为这些概念在官方文档上都有十分详细的说明,个人建议感兴趣的朋友可以一边阅读文档,一边调试样例程序。这里分享个git上的基于laravel5.1 版本的项目样例,朋友们可以clone到本地,参照文档搭建Lavarel的开发环境,然后就可以基于文档和样例学习调试Lavarel框架啦。
个人心得和启发
下面将和大家分享我接触Laravel框架后的心得,希望可以给这方面经验不足的朋友一点帮助和启发,也希望大神看到后可以指出分享中的不足之处,共同学习和进步。
- 首先不得不提的是Lavarel服务容器的实现,它是一个管理类依赖和执行依赖注入的强大工具。最近依赖注入和控制反转的概念持续火热,感兴趣的朋友可以看下这篇来自segmentfault社区的文章:PHP程序员如何理解IoC/DI,以及其他相关文章。其主要思想就是将被调用类的依赖注入到调用类中,Lavarel通过构造方法或set方法实现注入,我们可以动态的绑定接口到实现。依赖注入突出的优点在于降低了代码的耦合,我们不用自己手动去new一个被调用的类,容器将在我们需要的时候将它初始化。
关于容器以及依赖注入我这里不再给出代码样例说明,推荐的地址有更详细的解释。但是这的确是很进步的思想,相较于使用时就new一个类的传统实现而言,这个想法是很创新的。推荐大家去了解和熟悉这样的思想以及探索Lavarel对它的应用。虽然传统的方法也没有什么致命的问题,但是当你熟悉以及习惯这样的实现后,自然会发现它的美妙之处。
-
Laravel中的Eloquent ORM对于数据库的操作也十分迷人。Lavarel中提供了与数据表交互的模型,替代基于完整sql的操作。简单定义模型后(确定表名,主键以及此表是否需要打上时间戳),就可以方便的实现对表的操作。下面我们看两个基于这些查询构造器的查询样例:
$flights = App\Flight::where('active', 1) ->orderBy('name', 'desc') ->take(10) ->get();
这个语句表明需要查询表中active值为1的数据(在参数'active',1之间可以添加'>','<'等操作符,默认为=),根据name字段倒序排序,获取前10条数据。当我们在熟悉了这样的使用后很可能会爱上这样的操作,它不仅将我们的查询需求展示的非常清晰,而且也非常便于修改。这里设计的关键词也非常贴心,比如where,很容易对应到我们sql中的where查询,orderBy对应order by,take(10)表示我们获取10条数据,这样的关键词对应可以加快我们对它的掌握。
对于更新的操作也是一目了然:
App\Flight::where('active', 1) ->where('destination', 'San Diego') ->update(['delayed' => 1]);
当然,这样的操作也不是完美的,肯定也是存在使用这种方式比较繁琐的sql操作。Laravel中自然也提供了基于完整sql的查询方式,如:
$users = DB::select('select * from users where active = ?', [1]);
有一点想提醒大家注意下,Laravel中查询数据库返回的每一个数据项是实例而不是数组,可以通过toArray(),转化为数组继续操作。
-
Lavarel提供了强大的Monolog日志库,支持debug、info、notice、warning、error等多种日志级别(用RFC 5424标准)。在开发中记录错误日志是非常非常必要的,此前我们开发个别项目的时候不够重视日志,只在重要的地方设置监控点投递redis,但是这基本无法满足我们的调试和排错需求。有些线上问题无法快速定位到问题所在,甚至需要回滚代码,代价比较严重。
我们使用Laravel的时候,体会到它强大的日志功能,以及详细的日志带来的好处:可以快速定位到问题产生的位置并且在90%情况下直接找到发生问题的原因。所以希望大家在开发的过程中一定要养成记录日志的习惯。其中在开发阶段可以设置日志模式为debug,详细的调试。在线上则可以设置为error,记录错误日志的同时也避免产生过多的日志记录造成日志服务器的压力。
Laravel框架也是典型的mvc模式,相信大部分人对这个模式都很熟悉。这里我想分享一个小细节,就是在Laravel中,我们可以让控制器负责交互数据,model用于配置数据交互模型,单独再抽离一个层用于业务逻辑处理,这样可以使业务流程和逻辑更加清晰。
写在最后
本次主要分享的是Lavarel使用过程中的一些心得。在这里真心希望感兴趣的朋友可以熟悉下这个框架,一起交流学习。我会继续整理和分享关于Lavarel以及其他方面的学习心得,希望可以和大家一起进步。