博客

Laravel

使用 Laravel 构建 Web 应用:路由、Eloquent 模型、用户认证、队列和部署,配有可以直接用在真实项目中的实用示例。

这里暂时还没有文章!

我们还没有写过这方面的内容。请浏览其他主题,或稍后再来看看!

关于此主题的常见问题

针对读者关于此主题最常提出的问题,给出简明清晰的解答。

Laravel 是什么?

Laravel 是一个免费开源的 PHP 框架,用于开发 Web 应用。Laravel 为开发者提供了路由、数据库、登录、邮件、队列和测试等现成模块,大大减少重复代码。该框架遵循模型、视图、控制器(MVC)模式,并拥有庞大的社区。

Laravel 可以用来开发什么?

Laravel 可以用来开发各类 Web 应用,例如管理系统、客户门户、网上商店、预约平台以及为移动应用提供服务的 API。凡是需要用户、数据库和业务规则的项目,都适合用 Laravel。许多公司在 Laravel 上运行大型内部系统,因为这个框架稳定且易于扩展。

Laravel 适合初学者吗?

对已经掌握 PHP 基础的初学者来说,Laravel 很合适,因为它的代码可读性强,官方文档也清晰易懂。Laravel 还有庞大的社区、大量教程,以及能帮你自动生成登录页面的入门套件。先学好原生 PHP,理解这个框架会容易得多。

如何在电脑上安装 Laravel?

安装 Laravel,先要安装 PHP 和 Composer,然后运行 composer create-project laravel/laravel 并加上项目名称。用 laravel new 调用的 Laravel 安装器也能完成同样的工作,并提供入门套件可选。之后运行 php artisan serve 启动本地服务器,就能在浏览器中打开应用了。

Laravel 需要哪个 PHP 版本?

Laravel 需要较新的 PHP 8 版本,每个 Laravel 版本都会注明所支持的最低 PHP 版本。随着旧版 PHP 结束安全支持,新版 Laravel 也会相应停止对它们的支持。请务必查看你打算使用的 Laravel 版本的升级指南。

Laravel 中的路由是什么?

Laravel 中的路由,把一个网址和一种 HTTP 方法(例如 GET 或 POST)与负责响应它的代码关联起来。页面路由写在 routes/web.php 中,API 路由写在 routes/api.php 等文件中。路由可以调用闭包或控制器方法,还可以附加中间件来进行登录等检查。

Laravel 中的 Eloquent 是什么?

Eloquent 是 Laravel 的 ORM,让你可以把数据库表当作名为模型的 PHP 类来操作。每个模型对应一张表,每个对象对应一行数据,因此无需编写 SQL 就能读取和保存数据。Eloquent 还能处理一对多、多对多等关联关系。

Laravel 中的 Eloquent 关联关系是如何工作的?

Laravel 中的 Eloquent 关联关系,是定义在模型上的方法,例如 hasMany、belongsTo 和 belongsToMany,用来描述两张表之间的联系。定义好之后,就能像 $order->customer 这样直接读取关联数据,而无需编写 join 语句。使用 with 方法进行预加载,可以一次性取出关联数据,避免重复执行缓慢的查询。

Laravel 中的 N+1 查询问题是什么?

Laravel 中的 N+1 查询问题,是指代码先加载一组记录,然后又为每条记录各执行一次额外查询来获取关联数据。一个显示 100 个订单的页面,最终可能要执行 101 次查询,从而变得很慢。使用 with 方法进行预加载,用一次查询取出所有关联数据,就能解决这个问题。

Laravel 中的迁移是什么?

Laravel 中的迁移是用代码创建和修改数据库表的 PHP 文件。运行 php artisan migrate 即可执行迁移,让每位开发者和每台服务器都拥有相同的数据库结构。由于迁移文件纳入了版本控制,每张表的所有变更历史都能保留下来。

Laravel 中的 Blade 是什么?

Blade 是 Laravel 的模板引擎,用简单的标签编写包含循环、条件判断和布局的 HTML 页面。Blade 默认会对输出的值进行转义,保护页面免受跨站脚本攻击。模板会被编译成普通 PHP 并缓存起来,因此 Blade 几乎不会给每次请求增加开销。

Laravel 中的用户认证是如何工作的?

Laravel 中的用户认证通过守卫(guard)和提供者(provider)来实现,守卫负责确认用户身份,提供者负责从数据库加载用户。Laravel Breeze 等入门套件提供了现成的登录、注册和重置密码页面。密码使用 bcrypt 或 Argon2 进行哈希处理,绝不会以明文形式存储。

Laravel Sanctum 和 Laravel Passport 有什么区别?

Laravel Sanctum 为单页应用、移动应用和基础 API 提供简单的令牌和 Cookie 登录,而 Laravel Passport 是一个完整的 OAuth2 服务器。大多数项目只需要 Sanctum,因为它更轻量、更容易配置。只有当外部应用需要代表你的用户登录时,才适合使用 Passport。

Laravel 中的中间件是什么?

Laravel 中的中间件,是在请求到达你的代码之前,或在响应发出之前,对其进行检查或修改的一层层处理。常见的中间件负责登录检查、CSRF 防护、访问频率限制和语言设置。中间件可以挂在单个路由、一组路由或整个应用上。

Laravel 中的队列是如何工作的?

Laravel 中的队列把发送邮件、生成报表等耗时任务从 Web 请求中移出,交给后台任务处理。任务被推送到 Redis 或数据库等队列驱动中,再由通过 php artisan queue:work 启动的工作进程执行。用户能迅速得到响应,繁重的工作则在后台完成。

Laravel 应用中什么时候应该使用队列?

在 Laravel 应用中,只要某项任务耗时稍长或需要与外部服务通信,就应该使用队列,例如发送邮件、处理文件或接收支付回调。队列能让页面保持快速,失败的任务还能自动重试。Laravel Horizon 提供了一个用于监控 Redis 队列的看板。

如何在 Laravel 中设置定时任务?

在 Laravel 中设置定时任务,要在调度器中用 daily 或 everyFiveMinutes 等方法定义任务,然后在服务器上用一条 cron 记录每分钟运行一次 php artisan schedule:run。调度器会自行判断哪些任务到了执行时间。这样所有定时任务都写在代码里,而不是分散在许多条 cron 记录中。

如何在 Laravel 中验证表单数据?

在 Laravel 中验证表单数据,可以调用请求对象的 validate 方法,或使用存放验证规则的 Form Request 类。required、email、max 和 unique 等规则会在代码使用数据之前逐一检查每个字段。验证失败时,Laravel 会把用户带回原页面,并附上错误信息和之前填写的内容。

Laravel 如何防范常见的网络攻击?

Laravel 通过表单中的 CSRF 令牌、Blade 中的输出转义、数据库查询中的参数绑定以及密码哈希来防范常见的网络攻击。在常规使用中,这些默认机制能挡住跨站请求伪造、跨站脚本和 SQL 注入攻击。开发者仍需验证输入、检查权限,并及时更新框架。

如何把 Laravel 应用部署到服务器?

部署 Laravel 应用,要把代码拉取到服务器,运行不含开发依赖的 composer install,配置 .env 文件并执行数据库迁移。然后缓存配置、路由和视图,并把 Web 服务器指向 public 目录。许多团队会通过 Git 自动化这些步骤,确保每次发布都完全一致。

Laravel 应用需要什么样的服务器?

Laravel 应用需要一台装有 PHP、Nginx 或 Apache 等 Web 服务器、MySQL 或 PostgreSQL 等数据库以及 Composer 的服务器。通常还会加上 Redis 用于缓存和队列,并用进程管理器保持队列工作进程持续运行。Linkysoft 旗下的主机品牌 Hostrena 提供可直接从 Git 部署的 Laravel Web 应用主机。

如何让 Laravel 应用运行得更快?

让 Laravel 应用更快,可以缓存配置、路由和视图,预加载关联关系,并为经常搜索的数据库字段添加索引。把耗时工作移到队列中,并用 Redis 缓存繁重的查询结果,会有进一步的帮助。在服务器上开启 PHP OPcache,花很少的力气就能获得显著提升。

如何测试 Laravel 应用?

测试 Laravel 应用可以使用 PHPUnit 或 Pest,每个新项目都已预先配置好。功能测试向路由发送模拟请求,并检查响应和数据库,单元测试则检查单个类。运行 php artisan test 即可执行全部测试。

Laravel 能支撑用户众多的大型应用吗?

只要运行在配备缓存、队列、数据库索引,并在负载均衡器后部署多台应用服务器的良好环境中,Laravel 就能支撑用户众多的大型应用。框架本身很少成为瓶颈,真正的瓶颈通常是缓慢的查询和缺失的缓存。正因如此,Linkysoft 选用 PHP、Laravel、MySQL 和 Redis 来开发定制 Web 应用。

Laravel 版本应该多久升级一次?

至少要在当前 Laravel 版本停止提供安全修复之前完成升级。Laravel 大约每年发布一个大版本,每个版本都附有升级指南。小步、定期地升级,比一次跨越好几个版本要容易得多。