Laravel 菜鸟晋级之路
Posted SegmentFault
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 菜鸟晋级之路相关的知识,希望对你有一定的参考价值。
用Laravel也有三四个月了,虽然是兼职开发,但是使用的频率非常之高,毕竟是产品化的一个项目。
在这期间,也踩了无数的坑,走了很多弯路,所以准备把最近的感悟记录下来,方便后来者。
第一阶段:简单的增删改查
这是最开始接触Laravel的一个阶段。如果有php经验,那么应该能很快找到MVC的路径,然后驾轻就熟的开始写起来。虽然还显得有些笨拙,不过很快就能做出一些内容了。如果没有PHP经验,还是不建议轻易入坑的。毕竟连语法都不熟悉,很难上手。
Laravel由于支持大量的命令行生成代码,可能对于thinkPHP或者其他框架的用户并不太友好,不过当你需要创建大量文件的时候,还是会觉得很好用的。即使是简单的增删改查,也建议多用命令行,比如最好用的php artisan make:model Foo -m,直接创建了model和对应的migration。
第二阶段:数据库factory和seeder
开发了比较多的功能之后,会发现需要大量的测试数据,这时候factory和seeder就该大显身手了。当然这两个货并不怎么好搞定,faker的功能非常之多,factory中创建各种faker,然后在seeder中调用,学会这些,你就又升了一级。
第三阶段:表单剥离
最开始表单校验都是直接写在controller中,如果了解一下request相关的内容,可以将表单验证和数据创建更新,都放在单独的request类中,php artisan make:request FooForm即可创建一个表单验证器。我的习惯是,把新建和更新的验证,都写在一起,这样方便对照,以免出错。
表单类支持自动验证登录,自动验证规则,支持很多种规则还支持自定义规则(php artisan make:rules balabala),还可以用messages函数,返回自定义错误信息。表单相关的文档
第四阶段:自动化测试
Laravel从5.5才开始支持浏览器自动化测试dusk,不过功能直接就登峰造极了,各种assert让你眼花缭乱,而且易用性也在我用过的各种浏览器测试框架中首屈一指。如果没有接触过自动化测试或者浏览器测试,建议先尝试一下其他框架,python、nodejs也都是有这方面工具的,做http测试和浏览器什么的。传统的人工测试,实在有点落后了。
dusk最好用的,一个是支持分页,也就是把一部分内容抽象到单独的类里面;还有一个是有好多内置函数,不需要写一大堆选择器,比如type输入可以使用input的名字,press使用button的名字,clickLink使用链接的名字,还能自定义高级选择器;另一个是遇到错误可以自动截图,简直是神操作,可以直观看到出错的页面。测试相关的文档(https://d.laravel-china.org/docs/5.5/dusk)
第五阶段:设计模式
我目前刚达到这一阶段,今天才刚刚理解依赖注入的用法,才开始用上repository模式,之前数次重构,都没有成功。Laravel真正的神奇之处就在这里,你可以在controller之外的地方注入request对象,从而把大量的逻辑都从controller和model中剥离出来。在这之前的一阵子,我一直在用presenter模式,把视图中涉及到一些逻辑的代码都提取出来,以便复用。
项目越来越大之后,MVC已经完全不够用了,controller乱成一团,model里也有好多逻辑代码,view里有很多判断和计算。这时候就需要好好设计一下骨架了,比如presenter、repository等,service模式还没用过,后续可能会使用吧。Laravel中大型项目架构(http://oomusou.io/laravel/laravel-architecture/#Presenter)
相关文章推荐
相关讲堂推荐
主要内容
Laravel 简介
Laravel 与其他框架的不同
为什么你值得掌握 Laravel
在本课程中你将学到什么
Laravel 的主要模块
安装 Laravel
建立一个 Laravel 项目
Laravel 的目录结构介绍
系列课程简介
系列课程以 Laravel 框架为核心,从 Laravel 的基础架构和设计思想出发,逐一介绍 Laravel 的各主要模块,并提供上手教学。
系列课程共十五篇,囊括对 Laravel 核心和各模块的介绍和主要功能上手,并深入代码,诠释框架设计思路。
系列课程的意义并仅仅在于向大家介绍 Laravel ,同时也将通过 Laravel ,让大家体会优雅的程序结构设计和编程之美。
以上是关于Laravel 菜鸟晋级之路的主要内容,如果未能解决你的问题,请参考以下文章