Laravel学习笔记(一)

前言

每个人吸收知识的方式是不一样的,我在学习新框架时都会从 生命周期 开始。也就是一个请求从哪里接收,随后在什么地方对其处理,最终通过什么方式输出。剩下的便是在其上,多抒写多调试,做一两个 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 文件位于项目根目录下。使用 npmcnpm 安装对应的扩展包至本地。

应用要用到的前端资源文件(图片、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

好处是 代码版本控制数据库版本控制(回滚、重置、更新等)兼容其他数据库系统部署方便