本系列文章主要是方便初学 laravel 的人入门,帮一些朋友认识到如何入门、如何学习 laravel,同时补充一些忽略过的基础知识。php
Laravel 给了我学习新知识的一个契机,让我更早的接触更多的东西。我如今这个博客就是用 laravel 编写的。java
刚学习 laravel 实际上是一个痛苦的过程,不过痛苦事后,世界大不同。缘由就是形成痛苦的,不是 laravel 难,而是思想的陈旧带来的。laravel 自己也没有运用什么超前的理念,但即便是炒的旧饭,也比馊了的来得美味一些。既然旧饭要炒一下,那就得费点小小的力气。剩饭也香啊,尤为是撒了葱花以后
。laravel
学得越多,就应该记下来,这一系列笔记,也但愿可以帮助你们。数据库
因为网络上已经将 laravel 的安装步骤说的足够详细,本人也是经过这些方式安装的,没有什么特殊之处。关于安装就不在本内容中讨论,但我会在另外一篇文章内讲述 composer 相关的内容的时候,聊一聊这一部分。编程
好了开始吧。设计模式
第一篇文章我不打算将重心直接带到框架的使用上,而是让读者有一个清晰的概念。不少在 laravel 上的疑惑无非是安装上的问题、功能函数或对象方法上的问题,最后就是纠结框架结构布局和一些php基础知识上的。为了便于展开,我会着重在本文讲述一些与 laravel 相关的基础内容,这不但对于梳理整个框架体系有着很大的帮助,更多的是为了理解一种思想,这种思想不但适用于 laravel,更适合平时项目的开发。因为我我的也在不断学习之中,本篇文章会不断更新。本文除了文字讲述,也尽可能带来一些实例。在网络上现有的资源存在的状况下,本人会在文章内简要提出并给出连接,以便各位按需得到想要的。网络
laravel是一个当下比较流行的框架,其主要特点我的认为包括如下:composer
- 简洁而清晰地路由定义方式
- 强大的IoC容器
- 合理的框架结构
- 丰富的第三方库
只要理清 laravel 上述的特点,基本上对laravel了解的差很少了,就算是入门了。这前三样特点也刚好是 laravel 优雅的保证。其实 laravel 主要要学习的也就这么多。因此,为何会很难? laravel 真的很简单,也许只是没有找对方向,对吗?确定是的。框架
我目前所了解的,包括发生在我本身身上的,为何以为有时候 laravel 很难入门:思想、思路太过于陈旧。思想陈旧不算是贬义词,就比如你不能够说一个跟不上时代的人不如别人。但这种“旧”思想确实不适合 laravel 这种运用相对于旧思想而言的新框架。那么哪些人容易在 laravel 上犯难?函数
上述内容不具有绝对表明性。不过确实在 laravel 学习上犯难的,大都存在上述因素。不幸的是,最开始我基本所有知足上述条件,不幸的成为了学习 laravel 最艰难的那批人。但幸运的是,我很喜欢php,为了搞懂 laravel,照猫画虎,模仿着去实现 laravel 的功能。就是在这样一个过程里,我慢慢了解了 laravel 其实并不像想象中的那般高大上,无非只是用了 php 最为普通的一些东西。但成功必有其高明之处,laravel 将 php 的特性发挥到了极致,使得 laravel 的某一些境界变得比其余框架更高。虽然其余优秀的框架不在少数,但我认为,laravel 这个框架虽然总体不可以算是最好,但至少在设计思想上已经将许多(特别注明,不是所有)框架狠狠地拉在了身后。
要学好 laravel,至少要学会作一件事:看文档。大多数人以为入门难或不知如何入门,请老老实实看文档吧。
不少人说,laravel 文档真的很渣啊,但实际上,你只是要上手使用,用 laravel 开发一个博客级别的小型应用,这个做为入门的文档算是超级详尽的了。并非站着说话不腰疼,由于我也吐槽过。但在某一天百般无聊之下通读了整个文档,发现以前我所遇到的问题其实都写在过文档上。
吐槽laravel文档的重心不该该是不详尽,而应该是,太凌乱
laravel 的文档凌乱才是大问题,虽然看得出 laravel 文档的结构安排的初衷是为了减小冗余的文字,但这点却让像我这种被惯坏了的用户犯了大难。每每看似应该在这一部分出现的内容却在另外一篇文档内,这种安排不算奇葩也算是坑爹了。不得不认可,这样子的安排减小了没必要要的文字,但却对初学者不友好。
这种状况举个例子:定义控制器是 Route::controller(),按照常理这应该和路由部分有个交集,但在控制器介绍部分只字未提,极其容易和本来的路由定义搞混淆,由于他们都用了 Route 类。这只是一个典型。在数据库一块也经常出现相似问题,甚至更为严重。
可是,即便如此凌乱,也不该该成为不去读文档的理由。学习任何一个框架,都应该仔细阅读其文档。其实到最后才发现,原来 laravel 文档的安排对于熟悉的开发者而言,反而是很科学的,由于其归类很是明确,省去了没必要要的文字感染,让你专一于这一个问题点上。因此,不要认为文档不详细,其实文档作的已经够多了。要知道,文档是为了让你可以上手使用,并非完彻底全让你完全学透的,若是想要了解更多 laravel 的细节和功能,我认为应该去读一读 Laravel 的 API 文档和一部分的Symfony文档。若是愿意,阅读不一样组件的源代码效果更好,有时候你会产生一种源代码比文档更清晰的错觉 。
不管用什么框架,都不要忘了这都是在作 php 开发,所以 php 的基础很是重要。框架是让编码更为方便,提升效率的,并非为了下降某些层面的难度。
不少人在基础方面吃亏,却将其归咎于框架的错,可能这些人和我最初同样,没意识到 laravel 是一个在 php5.4 基础上开发的(新的 laravel 5.1 要求 php 5.5 以上),用到了不少特性。其中有一个重点就是命名空间和trait。命名空间不少人不喜欢,认为这是个很麻烦的事情,别忘了命名空间是从 php5.3 就有的了,最初这是为了解决重名和项目之间类的冲突的。到了如今,命名空间的存在使得项目与组件的代码更容易规划从而变得规范化,尤为是在自动加载的时候,这一部分参考 PSR-4
规范。命名空间的不熟悉会给学习 laravel 和一些新版本的框架带来足够多的麻烦。
想要了解 php 的命名空间不须要能够寻找教程,php 官方文档很是详尽。
除了命名空间,还有 trait,这是 php 5.4 以来的特性,适用于水平扩展类方法和功能的,经过 trait 能够更快的组装一个方法,具体依旧参考 php 官方文档,十分详尽。
其实除了 trait 和命名空间,做为创建在面向对象编程思想下的框架,尤为应当在整个开发中贯彻这一思想。而 php 的面向对象和 java、C# 还有 C++ 中有些地方有着很多的差别。
习惯了 php 的弱类型,有些人甚至不知道 php 能够实现类型约束:
class foo { public function __construct(Closure $config) { // } }
上述例子要求初始化时必须提供一个匿名函数做为参数。
重载、魔术方法、后期静态绑定等等面向对象的基础内容,这都是学习 laravel 以前的必修课。当你遇到困难,不少时候会在这上面出的问题。
不少人有些疑惑,如何在 laravel 内使用本身的类? 不少人疑惑,一些文件应当放在 laravel 的哪一个目录下? 也有不少人疑惑,为何会提示某一些类没法加载?
问这些问题的主要有两种人。一种是不了解 composer 的,一种是代码里存在问题的。后者占主要部分,但我想来讲说前者,由于一开始我是第一种。
虽然 Composer 不该当是学习 php 和 laravel 的必须的,但既然被 laravel 所使用且 composer 被接受和普及已是大势所趋,那就应当对其至少有些许了解。composer 被创造的初衷是用来管理 php 依赖的。利用 composer 能够很快的引入第三方库,且这些库能够被直接使用。
不仅仅是 Laravel,实际上做为一个基于 Symfony 框架组件开发的框架,Symfony 这个框架更能感觉到 Composer 利用的广泛,同时还有 Yii Framework 等主流的优秀框架,这些无一不使用了 composer 做为组件的包管理器。
Composer 自带的自动加载(autoload)机制是基于 PSR 规范的。所以很是有必要了解 PSR 规范,对于自动加载,仅需了解 PSR-4 便可,PSR-0 基本被淘汰。
因为利用好 composer 的自动加载,使得不管你的类库和函数放在哪都可以被加载。所以,如何在 laravel 中使用本身的类呢?很简单,基本上我所了解的就如下两种。
Composer 实现库和依赖的导入有不少种,Composer 的中文文档也很是详尽,再也不浪费篇幅。但这一切都须要熟悉 PSR-4 规范(该规范很简单,不要有芥蒂),其次就是必定要熟悉命名空间(namespace)。
同理,一些人疑惑,一些文件该放在 laravel 下的哪个目录?或者说,我这个文件能够放这里吗?
这么说吧,理论上,放在哪均可以,只要是能够经过 composer 和 laravel 自带的自动加载机制载入便可,且文件是在配置内所设定的命名空间内。若是加载时出现问题,能够经过 composer 命令dump-autoload
来解决,若是还有问题,须要检查是否命名空间和配置出现问题。