揭开Laravel面纱:一起探究这个Web应用程序构建PHP框架

近年来,Web应用程序和网站的开发变得越来越简单。即使是我们当中最受技术挑战的人也已经相当熟练地使用WordPress和Wix等产品。

对于更高级的开发人员,有许多工具可以帮助简化开发过程。这些工具中最有用的工具之一是Laravel

本文回答了“什么是Laravel?”这个问题。通过将其分解为Web开发中使用的PHP框架的基础知识的概述。接下来,我们将概述Laravel的功能,列出Laravel的重要结构和组件,并描述一些更有用的Laravel包。

  1. 什么是Laravel?
  2. 为什么使用Laravel?
  3. Laravel是做什么的?
  4. Laravel是如何工作的?
  5. 如何开始使用Laravel?
  6. Laravel还能做什么?
  7. 2022年的Laravel

什么是Laravel?

问题的简单答案,“什么是Laravel?” 一句话总结:Laravel是一个用于构建Web应用程序的跨平台PHP框架。

但真正了解Laravel的好处及其用途需要更深入的了解。Laravel允许开发人员利用一个大型的预编程功能库(例如身份验证、路由和HTML模板)。访问此库可以更轻松地快速构建强大的Web应用程序,同时最大限度地减少所需的编码量。

Laravel提供了一个功能强大的开发环境,以及直观和富有表现力的命令行界面。此外,Laravel使用对象关系映射(ORM) 来简化数据访问和操作。

Laravel应用程序具有高度可扩展性并且具有易于维护的代码库。得益于Laravel的模块化打包系统和强大的依赖管理,开发人员还可以无缝地将功能添加到他们的应用程序中。

Laravel是前端还是后端?

Laravel主要是一个后端开发框架,尽管它确实提供了一些前端功能。然而,Laravel的许多功能与前端无关。

Laravel是一种编程语言吗?

Laravel是一个PHP框架 ,使用脚本语言而不是严格的PHP编程语言。虽然脚本语言和编程语言是相关的,但它们有几个明显的区别,主要是在易用性和执行速度方面。

脚本语言是特定于平台的解释语言。相反,编程语言是与平台无关的编译语言。由于特定于平台,脚本语言依赖于它们正在工作的应用程序的编译器。

使用脚本语言构建的应用程序在运行时编译,这意味着每条指令在运行时单独解释,使应用程序比预编译的应用程序慢。如果遇到运行时错误,运行时编译也会导致应用程序停止或关闭;相反,预编译的应用程序在编译期间执行错误检查,使其在运行时更加健壮。然而,对于许多用户来说,脚本语言的缺点被它们的易用性和迭代所抵消。

什么是PHP框架?

PHP(PHP Hypertext Preprocessor的递归首字母缩写词)是一种开源的服务器端脚本语言,广泛用于Web开发。截至2021年初,近80%的网站都在使用PHP。虽然许多人可能不熟悉PHP,但每个人都熟悉最知名的PHP应用程序之一——WordPress。

PHP框架提供了一组代码库,其中包含允许用户更快地构建应用程序的预编程模块。它们为Web开发人员提供了许多好处,包括更快速的开发、减少编写代码的需求以及增强的安全性。它们还帮助新手开发人员建立良好的编码实践,因为它们需要特定的代码组织。更重要的是,与从头开始构建的应用程序相比,PHP 框架通常需要更少的维护。

许多现代PHP框架都是面向对象的。因此,在深入研究框架之前对类、对象和继承等概念有基本的了解是有益的。

MVC图

MVC图(来源:维基百科)

PHP框架使用模型-视图-控制器 (MVC) 架构。对于那些不熟悉MVC架构的人来说,模型是应用程序的数据,以及所有相关的逻辑。例如,订阅者表可以是模型。视图提供了与用户的交互点,可以查看和修改来自模型的数据。控制器是视图和模型之间的管道。换句话说,控制器接受用户请求,从模型中检索必要的信息,对其进行处理,然后将其返回给视图。

PHP应用程序(例如WordPress)存在一些已知漏洞。最显着的例子是代码注入和SQL注入。Laravel包含有助于防止SQL注入和其他攻击的功能。

但是,开发人员应采取额外的努力,例如渗透测试,以确保其应用程序的安全性。根据Cloud Defense的IT专家Barbara Ericson的说法,Web应用程序安全性包括渗透测试和Web应用程序防火墙,两者齐头并进。

渗透测试旨在由合格的网络安全专业人员执行更复杂的测试,他们将尝试在没有任何关于其开发的先验知识的情况下闯入您的系统,以识别未修补的安全漏洞。

为什么使用Laravel?

回答完“什么是Laravel?”后,下一个问题是“为什么选择Laravel?” Laravel提供了大量强大的工具,有助于使Web应用程序开发过程更轻松、更快,并且最终的应用程序代码库结构良好且易于维护。

Laravel的一些具体好处是:

Laravel易于学习

鉴于适当的背景,Laravel相对容易学习。Laravel确实需要对PHP和面向对象编程 (OOP) 概念有大致的了解才能有效使用。至少了解一些HTML也很有帮助。对于任何MVC架构,理解关系数据库管理系统(如MySQL或PostgreSQL)也很有帮助。

Laravel简化了开发过程

从一开始,Laravel旨在简化各种Web开发项目中常见的任务,如路由、身份验证、迁移、缓存等。Laravel使用直观且富有表现力的命令行界面和Composer使将预制模块集成到应用程序中变得简单。

Laravel还拥有大量的在线文档集合,这对于更有经验的开发人员来说是一个很好的起点。还提供针对所有技能水平的各种在线学习资源。

Laravel为所有级别的开发人员提供工具

Laravel将自己描述为一个渐进式框架,这意味着它包含了所有级别的用户都会发现有用的各种功能。例如,初学者可以访问入门工具包,用于基本身份验证功能等模块。许多这些工具将在下面更详细地讨论。

Laravel项目结构

Laravel项目结构(来源:ITSolutionStuff.com

更有经验的用户可以利用入门工具包底层的引擎来构建他们自己的身份验证流程,并将它们与他们喜欢的前端集成。

Laravel轻松扩展

Laravel具有高度可扩展性。通过对快速、分布式缓存系统的集成支持,Laravel应用程序能够处理每月数百万个请求。Laravel还提供了一个无服务器部署平台Vapor,它基于AWS并提供了高度的可扩展性。

Laravel拥有庞大的生态系统和社区

Laravel拥有庞大的生态系统,由大型开发者社区支持。因为Laravel是最常用的PHP框架之一,所以可用的Laravel应用程序和包库非常丰富。官方的Laravel包和第三方包都是现成的。

Laravel的官方软件包(其中许多将在下面讨论)包括身份验证、服务器管理、订阅计费、浏览器测试和自动化等等。许多网站都提供了第三方软件包,包括Packalyst 和Laravel News

Laravel开发者社区也提供了大量信息。有问题的开发人员一定会通过访问Laravel的众多论坛之一找到答案,例如Laravel.ioThe Laravel subredditLaracasts

Laravel被广泛使用

许多公司使用Laravel来帮助构建功能强大的网站:

Vacations by Rail是一个使用Laravel PHP框架构建的火车旅行计划网站。它还与Softrip的预订引擎集成。

Vacations by Rail后台使用Laravel

Vacations by Rail后台使用Laravel

用于Mac和iOS的精选应用程序的Setapp网站也是使用Laravel PHP框架构建的。

SetApp是用Laravel构建的

SetApp是用Laravel构建的

Restaurants.com的餐厅搜索应用程序使用起来非常直观,这要归功于它是使用Laravel移动应用程序模板构建的。

Restaurant.com由Laravel提供支持

Restaurant.com由Laravel提供支持

Laravel是做什么的?

Laravel的功能集过于广泛,无法在这个简短的概述中完全涵盖。一些更重要的功能包括:

路由处理(Route Handling)

Laravel提供了简单直观的路由处理,使用简单的名称来识别路由而不是长路径名。使用路由标识符还可以更轻松地维护应用程序,因为路由名称可以在一个地方更改,而不必在整个过程中更改。Laravel应用程序中的所有Web界面路由都注册在routes/web.php文件中。

安全(Security)

Laravel包含许多安全功能,包括用户身份验证、用户角色授权、电子邮件验证、加密服务、密码哈希和密码重置功能。

迁移(Migration)

Laravel使用迁移为应用程序数据库提供版本控制。迁移跟踪数据库随着时间的推移如何被修改,从而在必要时更容易销毁或重新创建数据库。

模板(Templating)

Blade是Laravel的PHP模板引擎。PHP模板引擎有助于将业务逻辑与HTML模板分开,从而使代码库更易于维护。Laravel的许多功能都依赖于Blade模板。Blade提供了比其他模板引擎更多的功能,因为Blade允许使用普通的PHP代码,而其他的则不允许。

会话(Sessions)

Laravel使用会话在多个请求中存储有关用户的信息。Cookie是Laravel内置会话驱动程序的一个示例。

数据验证(Data Validation)

Laravel使验证传入的用户数据变得简单。Laravel包含许多数据验证规则,并带有可自定义的错误消息。

缓存处理(Cache Handling)

Laravel支持数据缓存以最小化应用程序任务处理时间。Laravel的缓存API支持多种第三方缓存后端,例如Memcached和Redis。

错误处理(Error Handling)

启动新的Laravel项目时会自动配置错误处理。Laravel应用程序可以在调试模式下运行,为发生的所有错误生成详细的错误消息。

测试(Testing)

Laravel开箱即用地提供了大量的测试数据。Laravel支持单元测试,它可以测试应用程序代码的小而独立的部分,也支持功能测试,它可以测试更大的代码部分和更高级别的功能。

存储和文件管理(Storage and File Management)

Laravel使用Flysystem PHP包来提供用于处理各种文件系统的驱动程序,从本地文件系统到基于云的存储,例如Amazon S3。Laravel还提供了使用SSH文件传输协议 (SFTP)的文件传输。

电子邮件(Email)

Laravel包含一个基于SwiftMailer库的电子邮件API,它允许通过选择的服务发送电子邮件。Laravel支持电子邮件附件和电子邮件队列。

通知(Notifications)

Laravel支持通过多种渠道发送通知,无论是众所周知的渠道,如SMS或Slack,还是使用Laravel社区开发的渠道。

Laravel是如何工作的?

为了更好地理解Laravel可以做什么,了解Laravel如何处理请求(即请求生命周期)非常重要。如上所述,Laravel基于MVC架构,并响应来自用户的请求,控制器使用这些请求从模型中检索和处理数据,并在视图中将信息呈现给用户。

请求通过public/index.php文件进入Laravel应用程序,该文件加载框架的其余部分并检索Laravel应用程序的实例。在检索应用程序实例后,请求被路由到控制台内核或HTTP内核。

在其他任务中,内核定义了一系列引导程序,这些引导程序 执行在请求处理之前必须完成的任务,以及定义请求在处理之前必须通过的任何中间件。这些预处理任务包括加载应用程序所需的任何服务提供者。

一旦引导完成并注册了服务提供者,请求就会传递到路由器,然后路由器将请求定向到路由或控制器。此外,路由器运行任何所需的特定于路由的中间件。在请求通过所有必需的中间件后,路由或控制器方法的执行返回一个响应,该响应通过链传回视图。

你如何开始使用Laravel?

要开始使用Laravel,有必要了解Laravel中一些最重要的结构和功能。

服务容器

服务容器是Laravel的核心组件之一。服务容器管理类依赖和依赖注入。

Laravel服务容器

Laravel服务容器(来源:Christopher Rumpel)

服务容器是开发人员绑定运行Laravel应用程序所需的一切的地方。

Service Providers

同样重要的是Laravel Service Providers,将类和依赖项注入到服务容器中。

Facades

Facade是 绑定在服务容器中的类的静态接口。外观通过提供易于记忆的语法作为长类名的代理来创建易用性。

Packages

Packages是向Laravel添加功能的方式。有独立Package和特定于应用程序的包。服务提供者告诉Laravel在哪里加载包资源。

Laravel和许多其他本地开发工具一样,依赖于Docker。Docker是一种基于容器的工具,可让开发人员更轻松地创建和部署他们的应用程序。使用Docker容器,开发人员将其应用程序与其依赖项打包在一起,并将其部署为单个包。

命令行界面

Laravel包含一组命令行界面(CLI)。Artisan控制台包含的命令可帮助开发人员快速构建框架代码、简化和自动化重复性任务,以及更轻松地完成应用程序构建。Sail是Laravel 8中引入的轻量级命令行界面。Sail允许开发人员与Laravel的默认开发环境Docker进行交互。

Laravel Artisan CLI

Laravel Artisan CLI(来源:tutorialspoint.com)

Eloquent

Eloquent是一个对象关系映射器 (ORM),它允许 与数据库轻松交互。使用MVC架构,模型对应于数据库中的各个表。使用Eloquent,开发人员可以确保快速检索、简单的插入和更新以及直观的关系定义。

Composer

Composer是一个第三方应用程序级的 PHP 依赖管理工具。Composer管理Laravel应用程序所需的库、模块和插件。

Homestead

Laravel Homestead是一个开发环境,通过提供预打包的Vagrant盒子,允许在虚拟机上进行开发。Homestead包含Laravel应用程序开发所需的一切,包括PHP、MySQL、Nginx、Composer、Redis等等,因此开发人员无需在本地机器上安装这些包。Homestead确实需要安装 Vagrant和VirtualBoxParallels

身份验证入门套件

Laravel包含许多包来帮助开发人员快速启动和运行。在深入研究之前,您可能希望查看学习Laravel的许多可用资源中的一些。Laravel包含几个入门工具包,可帮助开发人员快速实现常用功能。

Laravel Breeze是一个身份验证入门工具包。它包括常见的身份验证和用户帐户功能,例如用户注册、登录、电子邮件验证以及密码确认和重置。Breeze还包括一个通过Vue的javascript前端。Breeze有一个使用Blade模板和Tailwind CSS的默认视图层。

对于更高级的身份验证功能,Laravel现在提供了Jetstream,它在版本8中首次引入。除了Breeze中的功能之外,Jetstream还提供了额外的高级功能,例如双因素身份验证、会话管理、通过Laravel Sanctum提供的API支持,以及可选的团队管理。

对于喜欢使用自己的身份验证前端的开发人员,Laravel提供了Fortify——一个与前端无关的身份验证后端。Fortify是Jetstream身份验证入门套件的引擎, 包括所有Laravel身份验证功能(例如,用户注册、登录、电子邮件验证、双因素身份验证等)。Fortify不是Laravel Breeze的底层引擎。

Laravel还通过Laravel Socialite提供基于社交媒体的身份验证 (OAuth)。

对于希望以最少的服务器配置部署应用程序,或者实际上想要无服务器部署的开发人员,Laravel提供了Forge和Vapor。Forge允许通过各种基础设施提供商以最少的配置工作进行部署。Vapor是一个基于AWS的无服务器部署平台。

对于那些希望采取下一步行动的人,开发人员可以通过他们自己的自托管网站部署他们的Laravel应用程序。这是因为自托管您的网站将要求您使用单个PHP命令(使用最新版本)和对服务器的SSH访问设置多个已定义的数据库。Laravel在一个开源的PHP框架中提供了这两种功能,而且作为一个额外的好处,它很容易安装。

Laravel还能做什么?

更好的问题可能是,“  Laravel不能做什么?” 存在数以千计的包来完成任意数量的功能。一些更有趣的官方Laravel包是:

Cashier和Spark

Laravel Cashier为Stripe和Paddle的订阅计费服务提供了一个接口。Cashier还提供高级订阅功能,例如优惠券和取消宽限期。

Cashier是Laravel Spark的引擎,这是一个计费管理面板 ,允许用户创建和管理他们的订阅。Spark也仅限于Stripe和Paddle作为支付提供商;自定义提供程序尚未与Spark兼容。然而,Spark确实允许开发人员选择他们的前端。

Valet

Laravel Valet是一个macOS开发环境,专注于速度和最少的资源使用(大约7MB的RAM)。Valet并不打算完全替代Sail或Homestead。相反,它适用于具有特定需求和资源限制的用户。

有关更多软件包,请参阅Laravel网站或Packalyst

2022年的Laravel

Laravel当前版本是9版,最初于2020年9月发布。该版本包括许多新功能和改进。版本8中的一些新功能包括Laravel Jetstream、作业批处理(允许执行一批作业,然后执行定义的操作)、Dynamic Blade组件(允许基于运行时值渲染运行时组件)和使用Tailwind Laravel分页器中默认的CSS等等。还对速率限制和维护模式进行了改进。

请注意,Laravel每年9月都会发布一个新的主要版本,并根据需要发布次要版本。

小结

寻求快速简单的Web应用程序开发的开发人员应该考虑学习Laravel。Laravel提供了一套广泛而强大的资源,通过消除从头开始编写许多常见任务的需要来简化开发过程。

Laravel还提供了一个安全的虚拟开发环境和直观的命令行界面。由于Laravel易于学习并且拥有强大的支持社区和生态系统,因此它是许多开发人员的自然选择,无论是初学者还是拥有多年经验的专家。