前言
每个人吸收知识的方式是不一样的,我在学习新框架时都会从 生命周期
开始。也就是一个请求从哪里接收,随后在什么地方对其处理,最终通过什么方式输出。剩下的便是在其上,多抒写多调试,做一两个 demo 或借鉴别人案例来学习。不管结果如何,必须通读一遍官方文档。
入口及载入流程
Laravel
属于 MVC
,是单一入口。所有请求均从 ./public/index.php
文件进行访问,nginx
等配置也最终指向 ./public
文件夹。文件内代码量非常少,但做的事情确很多。
index.php
会首先加载 Composer
生成的自动加载器,再加载自身的框架内应用实例 bootstrap/app.php
,通过应用实例处理本次请求,并返回最终结果。
应用中的启动器会去设置很多配置,及加载应用所运行的各种类。在对应的 ./config/app.php
文件中,有个一个 providers
数组,它就是应用所要加载的所有服务提供者类,关键是类还用了 延迟加载
。
目录结构
文件夹名称 | 说明 |
---|---|
app | 应用程序的业务逻辑代码存放文件夹 |
app/Console | 存放自定义 Artisian 命令文件 |
app/Http/Controllers | 存放控制器文件 |
app/Http/Middleware | 存放「中间件」文件 |
bootstrap | 框架启动与自动加载设置相关的文件 |
composer.json | 应用依赖的扩展包 |
composer.lock | 扩展包列表,确保这个应用的副本使用相同版本的扩展包 |
config | 应用程序的配置文件 |
database | 数据库操作相关文件(数据库迁移和数据填充) |
node_modules | 存放 NPM 依赖模块 |
package.json | 应用所需的 NPM 包配置文件 |
phpunit.xml | 测试工具 PHPUnit 的配置文件 |
public | 前端控制器和资源相关文件(图片、JavaScript、CSS) |
readme.md | 项目介绍说明文件 |
resources | 应用资源 |
resources/assets | 未编译前的应用资源文件(图片、JavaScript、CSS) |
resources/lang | 多语言文件 |
resources/views | 视图文件 |
routes/api.php | 用于定义 API 类型的路由 |
routes/channels.php | 事件转播注册信息 |
routes/console.php | 用于定义 Artisan 命令 |
routes/web.php | 用于定义 Web 类型的路由(重点,大部分情况下本书会用到) |
server.php | 使用 PHP 内置服务器时的 URL 重写(类似于 Apache 的 “mod_rewrite” ) |
storage | 编译后的视图、基于会话、文件缓存和其它框架生成的文件 |
storage/app | 目录可用于存储应用程序使用的任何文件 |
storage/framework | 目录被用于保存框架生成的文件及缓存 |
storage/logs | 应用程序的日志文件 |
tests | 应用测试相关文件 |
vendor | Composer 依赖模块 |
webpack.mix.js | Laravel 的前端工作流配置文件 |
yarn.lock | Yarn 依赖版本锁定文件 |
.gitignore | 被 Git 所忽略的文件 |
.env | 环境变量配置文件 |
前端搭建
Laravel 前端默认 ui 是 Bootstrap
,这里我不去更改它。框架已经帮我们集成了常用的扩展包,package.json
文件位于项目根目录下。使用 npm
或 cnpm
安装对应的扩展包至本地。
应用要用到的前端资源文件(图片、JavaScript、CSS),全部位于 resources/assets
目录下。
- 用到的扩展
扩展名称 | 说明 |
---|---|
axios | Axios 是一个基于 promise 的 HTTP 库 |
bootstrap-sass | Bootstrap NPM 扩展包 |
cross-env | 用于不同环境下的兼容问题(Win下建议去除) |
jquery | jQuery NPM 扩展包 |
laravel-mix | 由 Laravel 官方提供的静态资源管理工具 |
vue | VUE.js 前端框架 |
- npm常用指令
NPM | 说明 |
---|---|
npm install xxx | 安装 xxx 至本地模块 |
npm install -g xxx | 安装 xxx 至全局模块 |
npm install xxx --save | 安装 xxx 后写入 package.json 文件的dependencies 中 |
npm uninstall xxx --save | 将 xxx 包从项目中移除 |
npm update --save | 更新包 |
然后再使用 laravel-mix
来快捷的处理前端资源编译。Laravel
默认已经写好了一段实例:
// 载入扩展
let mix = require('laravel-mix');
// .js() 处理脚本,.sass() 处理样式。第二个参数是输出路径
mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css');
// 合并原生样式及脚本
mix.combine(['styles1.css','styles2.css'], 'public/css/all.css');
mix.combine(['one.js', 'two.js'], 'public/js/all.js');
// .version() 用于打版本号缓存
if (mix.config.inProduction) {
mix.version();
}
// <link rel="stylesheet" href="{{ mix('css/app.css') }}">
- 运行 Mix
指令 | 说明 |
---|---|
npm run dev | 运行所有 Mix 任务,开发环境不压缩资源文件 |
npm run prod or npm run production | 运行所有 Mix 任务,生产环境压缩资源文件 |
npm run watch | 运行后将会持续在终端运行并监听所有相关文件的修改,Webpack将会在发现修改后自动重新编译资源文件 |
npm run watch-poll | 当文件更改时,让 Webpack 不更新 |
数据库的CURD
Model
结合 Laravel 提供的 Eloquent ORM
跟数据库进行交互,实现数据的增删改查操作。数据库配置在 .env
中,再通过全局辅助函数 env()
赋值 config/database.php
文件中的对应数组内。
数据库迁移
数据库迁移(
Migration
)就像是数据库的版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构。迁移通常与 Laravel 的数据库结构生成器配合使用,让你轻松地构建数据库结构。如果你曾经试过让同事手动在数据库结构中添加字段,那么数据库迁移可以让你不再需要做这样的事情。
创建迁移的文件位于 ./database/migrations
中。迁移指令:
php artisan make:migration create_users_table
好处是 代码版本控制
、数据库版本控制(回滚、重置、更新等)
、兼容其他数据库系统
、部署方便
。