[入门级] Laravel 开胃菜 | Laravel Appetizer

适合入门新人,高手请看有没有笑话,原文地址 Laravel Appetizer

==========================

教程手册#

  1. laravel-5-fundamentals
  2. 国内 Enda 袁超 Laravel 视频教程
  3. 最适合中国人的 Laravel 教程
  4. Laravel 博客开发教程
  5. Laravel 手册
  6. Laravel 官方文档

就推荐这几个,其实最重要的还是官方文档,个人建议看英文,当然也有中文翻译 Laravel 中文文档,这个自行选择。当然,如果你只是看文档,想深入很难,多看框架的实现代码才是王道!

环境配置相关#

Laravel 本身提供 Homestead 集成环境,很方便。
安装教程:Windows Homestead Install / Mac Homestead Install。当然如果你觉得都很麻烦,用 XAMPP/MNPP 这类的也是可以的。

开发工具:PHPStorm 必选无疑(新版的要激活了,好人做到底 -->ACTIVATION

请支持正版 !!!请支持正版 !!!请支持正版 !!!

断点调试:Homstead+PHPStorm+XDebug

当然还有一些辅助调试的工具包,如:barryvdh/laravel-debugbar, 可自行选择。

最后还有个头疼的 Composer 为什么头疼?GFW 啊。。。。国内太慢,Laravel install 一下能半天。。。上梯子 Packagist / Composer 中国全量镜像 怎么设置里面有说明。

框架基础#

如果你之前没都没有接触过框架,不懂框架是个什么样的概念,最好自行补课,至少得明白 MVC 框架(Laravel 是 MVC 框架)是个什么意思。

Laravel 的几个必知概念点:

  • 模型(Model->Eloquent)
  • 视图(View->Blade Template)
  • 控制器(Controller->[Route,MiddlerWare,Request,Controller,Response])

这里我把 Router、MiddleWare 等也划入了 Controller 这个层面,我觉得这样比较好理解。

模型#

模型基本上就是用来和数据库打交道的。但也有人喜欢在 Model 里封装一些相关的方法,个人不建议这么的,当然这里的小技巧一会再说。

<?php

/**
* Class Pad
* @property string brand
* @property integer RAM
* @property integer size
* @property float price
* @property \Carbon\Carbon $created_at
* @property \Carbon\Carbon $updated_at
*/
class Pad extends Eloquent
{   
    protected $table = 'pads';
}

这里建议把你模型的一些属性或者方法(基本就是你的数据库字段)以注释的形式写到模型类里,这样方便 IDE 识别或者提示。在模型类的命名空间方面需要注意的是,框架并不限制你把模型放到哪里(默认在 app
目录下,5.1 的命名空间为 App), 这里建议是在 app 同级目录新建一个 models 目录,将这个目录用 Conposer 自动加载到根命名空间下。这里需要解释的是,我之所以去掉 App 命名空间是应为我的项目是 L4.2 开始的,在处理 Polymorphic Relations 的时候,xxxable_type 里是存的根命名空间的模型类(如:User),所以这里为了省事,直接放到了根命名空间(当然还有其他方法)。

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/",
        "":"models/"
    }
}
视图#

视图这个其实没什么好说的,在 Laravel 自带的 Blade 模板引擎用起来还是蛮顺手的,新版的 PHPStorm 直接支持的比较方便

控制器#

控制器这里我把 Route,MiddlerWare,Request,Controller,Response 都划分了在一起,原因是应为他们结合在一起完成了请求的处理调度响应的控制流程,可能不太科学,但个人觉得这样比较适合新人理解。

Route 在 Laravel 中起到了调度请求的一个作用,就像一条条马路一样,这条道到哪里,那条到哪里。当然,路由的调度,不一定要转接给控制器,路由也可以直接返回响应 (闭包)。这里有个注意点,就是在使用 Laravel 的 resource controller 的时候,如果你需要增加自定义的路由入口到该 controller,请务必写在 resource 导向之前。

Route::get('photos/popular', 'PhotoController@method');
Route::resource('photos', 'PhotoController');

MiddlerWare 在 Laravel 中扮演的是一个 “交警” 的角色,它可以用来进行请求的一些处理前过滤,或者做请求处理后的善后工作,用法大家自行看文档吧。

Request 在 Laravel 中相当于大路上行驶的车吧。他对用户的请求做了一下封装,我们可以通过 facade 或者依赖注入来获取 Request 实例,从而取得请求的参数等信息。

Controller 是 Laravel 处理用户请求的处理中心,我们可以适当的把一些简单业务逻辑写在 controller 中,然后做出相应处理。但是我为什么说只是做一些简单的业务逻辑呢? 当你业务逻辑太过于复杂的时候,你的代码就会相应的变多,那一个控制器的话会整个变得很长,不方便阅读;其次,这些复杂的业务逻辑如果都写在控制器的方法中,那么你很难做到复用。那这里就要用到 Laravel 的 Repositories (5.1 中是有默认文件夹的,5.2 中好像是移除了默认文件夹,如果没有可自行在 app 目录下创建,注意遵循 PSR4),把你的业务逻辑写到 Repositories 中,然后在 Controller 中 new 或者依赖注入。

代码已被折叠,点此展开

Response 是最后一个点了。Response 呢是 Laravel 对返回的一些封装,可以通过 Response 对象设置返回的 header 头,设置返回的数据等等。但是在 web 项目中,我们大多数返回的是视图(View),其实 View 渲染,然后封装成 Response 对象。

框架进阶#

IoC 容器和 Facades#

IoC 容器和 Facades 是我们在 Laravel 框架中常用到的一些东西,可能新手不是太了解这个东西,如果要详细讲解起来会长,比较占篇幅,这里我给个写的不错的博文,大家可自行查看。laravel 学习笔记 —— 神奇的服务容器

  1. Container 相当于一个箱子
  2. Laravel 在 boot 的时候通过 ServiceProvider 向箱子里面加东西,注明什么东西放在箱子的哪个地方
  3. 当你需要什么东西的时候,通过 Facade(放入时的注明)去取得这个东西(LazyLoad | 如果放入的时候已经实例化了那取得的就是实例)。
Artisan 命令行#

Laravel 提供的 Artisan 方便了 PHP 的命令行方式的交互。目前在我们项目当中 Artisan 用得最多的是定时的计划任务、数据的批量处理等。注意:命令行模式做数据处理,请做好最全面的异常处理或者进度保存。

定时计划任务:需要结合 Linux 的 Crontab 来做定时。

sudo crontab -e

# automatic statistic 每小时的第10分钟运行一次artisan的statistic命令
10 * * * * /usr/bin/php /var/www/admin/artisan statistic
Queue#

Laravel 的队列支持 database, Beanstalkd, Amazon SQS, Redis 和 synchronous。最后一个是本地的文件方式,默认选项,可以当做开发使用,如果是在线上部署的话,我还是推荐 Beanstalkd。理由是在国内的话 Amazon、SQS 等就不用考虑了,Database 肯定不太适合(查询效率),那就剩下 Beanstalkd 和 Redis,二者的话性能方面应该是差不多的,但是 Redis 没有一个可视化的管理界面,我们不能清楚的了解队列的状态,而这点 Beanstalkd 却提供有可视化界面 Tools。这里推荐:benstalkd_console, 都有现成的 Docker Image Pull/Run 就搞定了。

总结#

总的来说 Laravel 我也用了一年多了,感觉还是顺手的(可能我接触的框架比较少,至少开始用 4.2 的时候 Laravel 甩当时的 Think3.X 几条街吧,我木有鄙视国产的意思 --|),IoC 容器、DI、facade 等用起来也是相当爽的,扩展性也是杠杠的,需要是什么扩展包去 packagist 或者 git 上找一找,require 一下就 OK 了,所以在开发上会省很多造轮子的时间。

值得一提的是最近出了 Lumen5.2(Laravel 的精简版,最新版本基本上以 API 为目标了),那用 Laravel 做 API 也是 66 的了,大家可以去尝试下。(之前我是用的 L4.2+dingo API 做的)

Any way ,先说这么多等以后有想到什么再来补充吧。

本帖已被设为精华帖!
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。