laravel 学习笔记——起点

 

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

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

刚学习 laravel 实际上是一个痛苦的过程,不过痛苦事后,世界大不同。缘由就是形成痛苦的,不是 laravel 难,而是思想的陈旧带来的。laravel 自己也没有运用什么超前的理念,但即便是炒的旧饭,也比馊了的来得美味一些。既然旧饭要炒一下,那就得费点小小的力气。剩饭也香啊,尤为是撒了葱花以后sweat_smile sweat_smilesmirklaravel

学得越多,就应该记下来,这一系列笔记,也但愿可以帮助你们。数据库

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

好了开始吧。设计模式

 

声明

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

正文

laravel是一个当下比较流行的框架,其主要特点我的认为包括如下:composer

  • 简洁而清晰地路由定义方式
  • 强大的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文档。若是愿意,阅读不一样组件的源代码效果更好,有时候你会产生一种源代码比文档更清晰的错觉 stuck_out_tongue_closed_eyes

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 能够实现类型约束:

class foo

{

   public function __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 来解决,若是还有问题,须要检查是否命名空间和配置出现问题。

相关文章
相关标签/搜索