Laravel 入门到精通教程
适用于 Laravel 5.5、5.6、5.7、5.8、6.0 版本,本系列教程将围绕一个 LTS 版本,然后采取增量更新方式,随着 Laravel 版本的升级不断进行更新,直到 Laravel 框架不再维护。比如这个教程是在 Laravel 5.5 教程的基础上,涵盖 5.6、5.7、5.8、6.0 版本的功能。
有人会问这个教程和官方文档有什么区别,文档相对晦涩,很多地方会让新手云里雾里,且各章节相互独立、松散,你可以将本系列教程看作一本针对 Laravel 的、开放式的、持续更新的、以实例驱动的、深入浅出的非官方实战指南。
本系列教程源码存放在 Github 上:https://github.com/nonfu/laravel-tutorial-code(基础教程)、https://github.com/nonfu/todoapp(测试驱动开发项目代码都在这个仓库中)
更新频率:为保证教程质量,每周一、三、五更新。
一、预备篇
PHP 知识储备
搭建开发环境
- 通过 Sail 构建基于 Docker 的 Laravel 本地集成开发环境(适用于全平台)
- 通过 Homestead 构建基于 Vagrant 的 Laravel 本地集成开发环境(适用于全平台)(Windows 平台安装还可以参考这篇教程)
- 通过 Laradock 构建基于 Docker 的 Laravel 本地集成开发环境(适用于全平台)
- 通过 Valet 在 Mac 系统构建轻量级 Laravel 本地集成开发环境
- 增补篇:Mac 系统为 Valet 开发环境安装指定版本 MySQL
- 通过 Laragon 在 Windows 系统构建 Laravel 本地集成开发环境
- Windows 本地开发三步曲(一)—— 基于 WSL 在 Windows 中搭建 PHP 本地开发环境
- Windows 本地开发三步曲(二)—— 在 WSL 2 中基于 Docker 编排 LNMP 运行环境
- Windows 本地开发三步曲(三)—— PhpStorm 集成 WSL 内的 PHP 进行单元测试和代码调试
- 代码编辑器推荐:玩转 PhpStorm 系列
- 代码编辑器推荐:使用 VS Code 进行 Laravel 开发
- 创建并运行一个新的 Laravel 项目
二、基础篇
路由&控制器
- 路由入门:路由定义、参数传递及路由命名
- 路由分组:中间件、路由前缀、子域名及命名空间
- 控制器:MVC模式、控制器编写、依赖注入、资源控制器
- 路由进阶:模型绑定、兜底路由、频率限制和路由缓存
- 表单请求方法伪造 & 跨站请求伪造(CSRF)攻击保护
视图 & Blade 模板
前端入门
- 在 Laravel 项目中使用 Bootstrap 框架
- 在 Laravel 中编写 Sass 入门教程
- 在 Laravel 中编写第一个 Vue 组件
- 通过 Laravel Mix 编译前端资源
- 基于 Livewire 通过 PHP 编写视图组件
处理用户请求
- 通过 Request 对象实例获取用户请求数据
- 通过 Laravel + Vue 组件实现文件异步上传
- 在 Laravel 控制器中进行表单请求验证
- 在单独的表单请求类中实现字段验证逻辑
- 通过匿名函数和验证规则类自定义字段验证规则
Artisan & Tinker
数据库和 Eloquent
- 连接配置和读写分离
- 通过迁移创建数据表
- 通过填充器快速填充数据
- 查询构建器入门:数据库增删改查
- 查询构建器进阶:构建复杂的查询语句
- Eloquent 模型入门:实现增删改查操作
- Eloquent 模型进阶:批量赋值与软删除
- Eloquent 模型进阶:访问器与修改器
- Eloquent 模型进阶:查询作用域(全局、局部、动态)
- Eloquent 模型进阶:模型事件及监听方式
- Eloquent 模型进阶:关联关系(上)
- Eloquent 模型进阶:关联关系(中)
- Eloquent 模型进阶:关联关系(下)
- 结合 Bootstrap + Vue 组件实现异步分页
- 基于 Laravel + Vue 构建一个类似 Twitter 的 Web 应用
三、进阶篇
用户认证与授权
- 通过内置脚手架快速实现用户认证
- 用户登录注册流程及多字段登录实现
- 基于多表的用户认证功能实现(前后台用户)
- 通过 Socialite 基于社交网络账号实现用户登录认证
- 不使用 Passport 实现基于 Token 的简单 API 认证
- 通过 Passport 实现 API 请求认证:单页面应用篇(Cookie授权令牌)
- 通过 Passport 实现 API 请求认证:移动端应用篇(密码授权令牌)
- 通过 Passport 实现 API 请求认证:第三方应用篇(授权码获取令牌)
- 通过 Passport 实现 API 请求认证:开放平台篇(客户端凭证令牌)
- 通过 Passport 实现 API 请求认证:沙箱测试篇(私人访问令牌)
- 通过 Passport 实现 API 请求认证:隐式授权令牌
- 通过 Passport 实现 API 请求认证:令牌作用域详解
- 基于 Laravel 框架内置脚手架快速实现邮箱验证功能
- 通过监听用户注册登录、邮箱验证事件实现简单的积分功能
- 基于 Cookie 实现基于 Session 的单点登录
- 基于 CAS 实现通用的单点登录解决方案(一):CAS 原理及服务端搭建
- 基于 CAS 实现通用的单点登录解决方案(二):CAS 客户端搭建及单点登录测试
- 基于 CAS 实现通用的单点登录解决方案(三):CAS 单点登录统一退出实现
- 通过系统自带的授权机制实现简单的用户权限管理
- 通过 Entrust 扩展包实现基于 RBAC 的用户权限管理
- 通过 Permission 扩展包实现基于 RBAC 的用户权限管理
请求与响应
- Laravel 底层是如何处理 HTTP 请求的
- 请求类 Request 剖析及其使用介绍
- 响应类 Response 剖析及其使用介绍
- Laravel 中间件底层源码剖析
- Laravel 路由匹配和执行底层源码剖析
- Laravel 异常处理篇:底层源码剖析
- Laravel 异常处理篇:异常报告、渲染与自定义处理
底层原理
测试驱动开发
- 从基于 PHPUnit 编写单元测试开始
- 在 Laravel 中基于 PHPUnit 进行代码测试(一):测试编排篇
- 在 Laravel 中基于 PHPUnit 进行代码测试(二):单元测试篇
- 在 Laravel 中基于 PHPUnit 进行代码测试(三):功能测试篇(上)
- 在 Laravel 中基于 PHPUnit 进行代码测试(四):功能测试篇(下)
- 在 Laravel 中基于 Dusk 实现浏览器自动化测试快速入门
- 通过测试驱动开发构建待办任务项目(一):后端接口和功能测试篇
- 通过测试驱动开发构建待办任务项目(二):前端功能和浏览器测试篇
- 持续集成篇(一):持续集成定义、目标和常用 CI 系统对比
- 持续集成篇(二):基于 Github + CircleCI 实现 Laravel 项目的持续集成
- 持续集成篇(三):基于 Github + Travis CI 实现 Laravel 项目的持续集成
- 持续集成篇(四):基于 Coding + Jenkins 实现 Laravel 项目的持续集成
编写 JSON API
- RESTful API 设计原则于最佳实践
- 基于资源控制器和 API 资源类快速构建 JSON API
- 基于 Passport 实现 Laravel API 接口认证
- 基于 JWT 实现 Laravel API 接口认证
- 基于 CORS 解决前后端分离应用跨域请求权限问题
- 基于 GraphQL 构建 Laravel API —— 基本使用篇
- 基于 GraphQL 构建 Laravel API —— 高级使用篇
- 基于 GraphQL 构建前后端分离的 Laravel 博客应用
- 使用 Laravel API 文档生成器自动为项目生成 API 文档
- 使用 Dingo API 扩展包构建 Laravel API(一) —— 安装配置篇
- 使用 Dingo API 扩展包构建 Laravel API(二) —— 编写第一个 API 接口
- 使用 Dingo API 扩展包构建 Laravel API(三) —— 返回基本 JSON 响应
- 使用 Dingo API 扩展包构建 Laravel API(四) —— 转化器篇(上):Fractal 使用入门
- 使用 Dingo API 扩展包构建 Laravel API(五) —— 转化器篇(下):集合响应构建器构建响应
- 使用 Dingo API 扩展包构建 Laravel API(六) —— 转化器及响应构建器的高级使用
- 使用 Dingo API 扩展包构建 Laravel API(七) —— 错误及异常处理
- 使用 Dingo API 扩展包构建 Laravel API(八) —— API 认证实现(上)
- 使用 Dingo API 扩展包构建 Laravel API(九) —— API 认证实现(下)
- 使用 Dingo API 扩展包构建 Laravel API(十) —— 路由访问频率限制
- 使用 Dingo API 扩展包构建 Laravel API(十一) —— 应用内部请求 Dingo API
- 使用 Dingo API 扩展包构建 Laravel API(十二) —— 生成 API 文档
- 在 Laravel 中集成 API 文档生成器扩展包为 Dingo API 接口生成文档
- 在 Laravel 中集成 Swagger 扩展包为 Laravel API 生成接口文档并对其进行测试
Redis 与系统组件
- 使用 Redis 在 Laravel 中实现应用缓存功能及底层源码探究
- 使用 Redis 在 Laravel 应用中实现消息队列系统及底层源码探究
- Laravel 消息队列的优先级和失败任务重试实现
- 基于消息队列实现事件监听处理及底层源码探究
- 基于 Redis 发布订阅 + Socket.io 实现事件消息广播功能
- 基于 Redis 实现 Laravel 广播功能(上):广播事件分发和底层源码探究
- 基于 Redis 实现 Laravel 广播功能(中):引入 Laravel Echo 接收广播消息
- 基于 Redis 实现 Laravel 广播功能(下):在私有频道和存在频道发布和接收消息
- Redis 分布式锁及其在 Laravel 底层的实现
- Redis 分布式锁在 Laravel 任务调度底层的应用
- 基于 Redis 实现简单限流器及其在 Laravel 路由中间件中的应用
- 基于 Redis 实现高级限流器及其在 Laravel 队列任务处理中的应用
- 基于 Redis 消息队列实现 Laravel 文件存储的异步处理
- 基于 Redis 消息队列实现 Laravel 邮件通知的异步发送
- 基于 Redis 实现 Laravel 分布式 Session 存取和底层源码探究
四、高性能 Laravel
Swoole 篇
MySQL 篇
Redis 篇
消息队列篇
Nginx 篇
筹备中...
五、实战篇
- 入门项目:博客应用(Laravel 快速入门指南,含上线流程,已完成)
- 入门项目:单页面应用(Laravel 博客单页面应用版,已完成)
- 入门项目:微信小程序应用(基于 Laravel API 接口的小程序快速入门指南,含上线流程,已初步完成)
- 进阶项目:前后端分离应用(掌握 Laravel + Vue.js 前后端日常开发,已完成)
- 实战项目:电商项目(包含用户、商品、交易、物流、后台运营完整链路,筹备中)
- 实战项目:直播项目(筹备中)(基于 Swoole 开发,筹备中)
- 跨语言项目:微服务实战(基于 Laravel + Go Micro 框架开发电商微服务项目)
六、附录篇
Laravel 深入核心系列教程
以下教程由用户投稿
- 依赖注入,控制翻转,反射各个概念的理解和使用
- 如何实现Ioc容器和服务提供者是什么概念
- Facades外观模式背后实现原理
- Contracts契约之面向接口编程
- 中间件,管道之面向切面编程
- Laravel生命周期
- Laravel事件之观察者模式
- 新特性trait在Laravel中的应用
- 为什么laravel没有规划models目录?
- Eloquent ORM中的方法find方法的实现流程
- 如果开发Laravel扩展包和发布到composer
- Laravel与前端最佳实践
- 基于JWT的api认证
- 负载均衡,分布式,集群的理解,多台服务器代码如何同步
- 基于教程实现的一个简单网站实例
相关资源
Github 项目:教程、代码
答疑解惑
如果你在学习过程中有任何问题,可以通过在对应教程下方留言,或者在问答模块提问,还可以加入Laravel学院社群与我讨论(优先级:社群>>评论>问答)。
历史版本教程入口
七、订阅服务
如果你觉得这个系列教程对你学习有帮助,可以选择升级为学院君订阅用户对学院君进行支持:
13 Comments
学院君您好, 请问剩下的模块什么时候更新呢?有劳了
存储与搜索 本地存储 云存储 Session Cookie 通过 Laravel Scout 进行全文搜索 邮件和通知 邮件 通知 队列、广播、事件、任务调度 队列 事件 广播 任务调度 辅助函数&集合 辅助函数 集合
正在更新中 等把 Swoole 这块结束了就过来更新这些了
正在更新中 等把 Swoole 这块结束了就过来更新这些了
系统组件这些啥时候更新呢 ?
会在PHP全栈工程师指南更新过程中补上 实际上可以把这里看作全栈系列的一部分 那里也是基于 Laravel 框架作为主框架
学院君,请教一下你,在同一台服务器同一目录下的两个laravel项目,我想在a项目调用b项目的service,有啥好的办法吗?
两个laravel项目就是两个应用呗 那肯定是通过网络调用了 通过 RPC/HTTP 都可以啊 一般提供个 HTTP 接口就好了啊
是同一个应用来的,学院君,只是有些数据和代码是一样的,又不想同一份代码维护两遍,你意思说在一个项目里通过curl或rpc去调用接口数据吗?这样多一层网络传输不知道会不会影响速度
那为什么要搞两个 Laravel 项目呢 没太明白 感觉这个架构设计有问题啊 如果 Application 容器是同一个 就可以通过内存间调用了
您能不能提供一个环境,能直接跑您教程的内容,我尝试下载了github内容,没办法在我电脑上复现
下载了对应github仓库之后(https://github.com/nonfu/laravel-tutorial-code)
cd laravel_8_crud/
composer install
npm install
cp .env.example .env
php artisan key:generate
Add my database config in the .env file
php artisan migrate
使用VScode搜索PackageManifest.php查看storage\logs\laravel.log
php artisan serve