laravel 学习笔记(1)——起点

原文地址:http://www.insp.top/learn-laravel-container

本系列文章主要是方便初学 laravel 的人入门,帮一些朋友认识到如何入门、如何学习 laravel,同时补充一些忽略过的基础知识。

Laravel 给了我学习新知识的一个契机,让我更早的接触更多的东西。我现在这个博客就是用 laravel 编写的。

刚学习 laravel 其实是一个痛苦的过程,不过痛苦过后,世界大不一样。原因就是造成痛苦的,不是 laravel 难,而是思想的陈旧带来的。laravel 本身也没有运用什么超前的理念,但即使是炒的旧饭,也比馊了的来得美味一些。既然旧饭要炒一下,那就得费点小小的力气。剩饭也香啊,尤其是撒了葱花之后

学得越多,就应该记下来,这一系列笔记,也希望能够帮助大家。

由于网络上已经将 laravel 的安装步骤说的足够详细,本人也是通过这些方式安装的,没有什么特殊之处。关于安装就不在本内容中讨论,但我会在另一篇文章内讲述 composer 相关的内容的时候,聊一聊这一部分。

好了开始吧。

声明

第一篇文章我不打算将重心直接带到框架的使用上,而是让读者有一个清晰的概念。很多在 laravel 上的疑惑无非是安装上的问题、功能函数或对象方法上的问题,最后就是纠结框架结构布局和一些php基础知识上的。为了便于展开,我会着重在本文讲述一些与 laravel 相关的基础内容,这不但对于梳理整个框架体系有着很大的帮助,更多的是为了理解一种思想,这种思想不但适用于 laravel,更适合平时项目的开发。由于我个人也在不断学习之中,本篇文章会不断更新。本文除了文字讲述,也尽量带来一些实例。在网络上现有的资源存在的情况下,本人会在文章内简要提出并给出链接,以便各位按需获得想要的。

正文

laravel是一个当下比较流行的框架,其主要特色个人认为包括以下:

简洁而清晰地路由定义方式

强大的IoC容器

合理的框架结构

丰富的第三方库

入门很简单

只要理清 laravel 上述的特色,基本上对laravel了解的差不多了,就算是入门了。这前三样特色也恰好是 laravel 优雅的保证。其实 laravel 主要要学习的也就这么多。所以,为什么会很难? laravel 真的很简单,也许只是没有找对方向,对吗?肯定是的。

我目前所了解的,包括发生在我自己身上的,为什么觉得有时候 laravel 很难入门:思想、思路太过于陈旧。思想陈旧不算是贬义词,就好比你不可以说一个跟不上时代的人不如别人。但这种“旧”思想确实不适合 laravel 这种运用相对于旧思想而言的新框架。那么哪些人容易在 laravel 上犯难?

没有认认真真(再次强调,是认认真真)看文档的(占比至少97%)

php 基础不扎实的

不熟悉面向对象编程的

不熟悉面向接口编程的

不知匿名函数为何物的

不熟悉反射的

不喜欢命名空间的

不喜欢研究设计模式的

使用 php5.4 以前版本的或不喜欢运用新特性的

没用过 composer

不熟悉 PSR 规范

上述内容不具备绝对代表性。不过确实在 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 开发,因此 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 可以实现类型约束:

classfoo

{

publicfunction__construct(Closure$config)

{

//

}

}


上述例子要求初始化时必须提供一个匿名函数作为参数。

重载、魔术方法、后期静态绑定等等面向对象的基础内容,这都是学习 laravel 之前的必修课。当你遇到困难,很多时候会在这上面出的问题。

Composer 与 PSR 规范

很多人有些疑惑,如何在 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 中使用自己的类呢?很简单,基本上我所了解的就以下两种。

如果你的类库是发布到某个版本控制系统上,可以通过 packagist.org 发布自己的包,然后通过 composer 的 require 引入即可。

如果你没有使用 vcs 且仅仅只是在当前项目中创建的类的话,只需利用好 composer 的 autoload 即可。

Composer 实现库和依赖的导入有很多种,Composer 的中文文档也非常详尽,不再浪费篇幅。但这一切都需要熟悉 PSR-4 规范(该规范很简单,不要有芥蒂),其次就是一定要熟悉命名空间(namespace)。

同理,一些人疑惑,一些文件该放在 laravel 下的哪一个目录?或者说,我这个文件可以放这里吗?

这么说吧,理论上,放在哪都可以,只要是可以通过 composer 和 laravel 自带的自动加载机制载入即可,且文件是在配置内所设定的命名空间内。如果加载时出现问题,可以通过 composer 命令dump-autoload来解决,如果还有问题,需要检查是否命名空间和配置出现问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容