Getting Started With Laravel 5.0
这两天开始学习laravel 5.0框架,以前用过ThinkPHP&CI框架,觉得laravel很不一样。
最直观的感受是它上手很难,它的运行机制比较难以理解,需要很深入的学习。
我其实很不推荐新手来学习这个框架,如果只是觉得laravel很流行,而自己对网站开发整套体系还不是很了解,对MVC结构理解不深的情况下,千万不要用它。因为这很难,你不得不花费很多时间去学习和框架无关的PHP知识,因为Laravel用到了非常多PHP的新特性。
我的建议是:
先学习TP、CI或者YII框架,他们比较简单,中文资料很多,而且国内用的很多,能够找到基于这两个框架构建的项目的源码也很多。学习它们能加深你对开发流程的理解,等用熟了再来学习Laravel不迟。(Laravel中文资料目前很少)
希望我的学习经验能帮助到大家,如果有任何问题,请及时指正,谢谢。
本文不对细节进行讲解
安装环境
-
用composer安装Laravel
和CI以及TP很不一样的地方,laravel是用composer安装的,不像TP&CI直接去官网下载一个ZIP包解压到项目目录即可。由于以前没有用过composer,所以不得不学习下composer。
当然现在发现,composer其实就是PHP版的bower
,bower是安装js文件而composer安装的则是PHP文件。
laravel为什么要用composer来安装
看看安装过程中屏幕的输出可能大致就明白了。我的理解是,laravel框架很多模块并没有自己来造轮子,而是引用了其它框架的实现,比如symfony
封装的某些class就被laravel拿过来用了。所以项目需要依赖于其它的某些PHP文件,这样的话用composer来进行管理就很方便了,要是symfony更新了某些被用到的class,我们是不是就能同步更新了呢? -
安装homestead
官方文档推荐使用homestead,因为它封装了php5.6 mysql memcache redis nodejs nginx..还做了一些有用的配置,看起来非常爽啊。我立刻就去试了下,结果这一去,花费了我不少时间啊……不过收获还是不小的。要介绍homestead
不得不先说说它的基础vagrant
homestead
假设你有一台windows的机器,但是你要用linux,你应该怎么办?显然是安装一个虚拟机啦(假设是virtualbox
)!安装好虚拟机我们去下载一个linux的镜像然后在虚拟机里载入这个镜像,就可以在虚拟机里运行linux了。以上相信大家都做过,然后进到虚拟机,一切都是新的,下载PHP、mysql、nginx、node然后安装配置……这是一个相当痛苦而漫长的过程。homestead
其实就是laravel官方帮你配置好了的linux(ubuntu
)系统,里面安装了它说的那些东西,所以你通过虚拟机运行homestead就相当于运行了一个配置好的直接可以进行开发的ubuntu系统。
vagrant
要安装homestead,你必须使用vagrant
。vagrant是一个强大的工具,我只会它简单的功能,所以我暂且把它同样类比成一个包管理工具,像composer管理php文件bower管理js文件一样,vagrant用来管理虚拟机可以载入的操作系统镜像。比如你想要做JAVA的开发而觉得搭建环境是一件蛋疼的事情,你可以去镜像仓库搜别人已经配置好的系统直接用。homestead
就是laravel官方封装的一个系统,所以相信你现在应该大概了解homestead和vagrant的概念了。用vagrant还有一个非常重要的场合,就是团队开发。你需要你团队里的人都使用相同的开发环境和配置,所以你可以用vagrant配置好一个系统,团队成员只需要几个简单的命令就能安装好了。当然把vagrant类比成包管理工具似乎不够公平,因为它还有很多功能我并不知道……感兴趣你可以到vagrant官网看看。
细节问题
按照上面的说法,我安装vagrant然后通过vagrant来安装了homestead,但是为什么文档里还要我去github克隆一个东西然后运行一个脚本呢?简单讲:vagrant可以通过一个配置文件来修改homestead中的某些配置,这其实是vagrant强大的地方,因为如果开发团队需要修改开发环境,只需要leader配置下这个文件,然后队员们同步这个配置文件就好了。所以文档要你克隆的内容,其实就是vagrant去修改homestead的配置文件,它设置了nginx的web目录和一些额外的东西。具体你可以自己看,我只告诉你这是什么以及用来干什么的就好了。 -
VIM配置
homestead并没有配置出一个良好的适合开发的VIM,所以你还需要自己配置下VIM。为此我也花了将近一天的时间来学习。这篇VIM教程写得非常好,详细讲了如何把VIM配置成一个IDE的过程,并告诉了你这些配置到底是干嘛的。相信你看完之后会受益匪浅。
创建Laravel
如果你看了上面的内容并加以简单地学习,相信你已经花费了不少时间,这正是我不推荐新手学习Laravel的原因,但我相信你肯定受益匪浅。接下来才开始我们的正题
想再次说一下,我并不想写一篇关于如何一步一步开发一个Laravel项目的文章,我只是介绍我学习的经历,并把一些我的理解记下来。所以很多地方具体怎么做我不会写了,文档里很清楚,你只需要跟着一步一步做就好了。
以下我假设你已经安装好Laravel,配置好nginx,并尝试过它自带的登陆注册功能了。
- Laravel运行的流程
我学习一个框架喜欢先了解它是怎么运行的,所以并没有按照文档的顺序去看,也不推荐大家这么做。那么怎样才能快速地了解一个框架的运行流程呢?首先你还是得对框架有一个最基本的了解,怎么才算有一个最基本的了解呢?你需要实现这样一个功能,当访问localhost/hello的时候在页面上能输出hello Laravel这个字符串。简答吧?你可以看看文档中路由部分然后迅速能实现这个功能。接下来,我要介绍一个函数debug_print_backtrace
debug_print_backtrace
可能很多小伙伴们并不知道这个函数,但不得不说这是一个能快速帮助你学习框架和融入新项目的函数。它的作用是在页面上打印出调用栈,换句话讲就是整个项目执行到debug_print_backtrace
这条语句之前都依次调用了哪些类和方法。怎么样,是不是感觉很强大?具体的说明可以看这里。
debug_backtrace
此函数和上面的函数只差了个print,所以你应该能猜到,这个函数并不会立即打印,而是把要打印的内容返回。因为debug_print_backtrace
打印的内容很乱,所以我推荐如下写法//主要代码 $str = debug_backtrace(); var_dump($str);
那效果就是如下
可以看到,从项目入口文件index.php到最终执行到路由里调试输出语句,一个调用了31个类方法。所以整个流程是非常复杂的……
大家有兴趣可以看看index.php
和config/app.php
,compiled.php
有1万7千多行,我不建议你刚开始就去阅读……
概括的流程
最概括地讲,Laravel的项目是这样的:
用户发送http请求<-->nginx<-->index.php
index.php是整个项目的入口,它干的事情依次是- 载入autoload
- 载入应用的实例
- 捕获http请求
- 把http请求当成参数传递给handle方法
- 获取haddle方法的返回(也就是你的应用对此请求处理的最终结果)并返回给客户端
- 做一些收尾工作