Laravel 面试问答17 Mar 2025 | 阅读 17 分钟 ![]() 下面列出了最常问的 Laravel 面试问题和答案。 1) 什么是 Laravel?Laravel 是一个基于 PHP 的免费开源 Web 框架。它由 Taylor Otwell 开发。它支持 MVC(模型-视图-控制器)架构模式。Laravel 提供了一种富有表现力且优雅的语法,有助于轻松快速地创建出色的 Web 应用程序。Laravel 的第一个版本于 2011 年 6 月 9 日发布。 根据 SitePoint 在 2015 年 3 月的调查,Laravel 被评为最受欢迎的 PHP 框架之一,与 Symfony、Nette、CodeIgniter 和 Yii2 并列。 ![]() 2) Laravel 的主要功能有哪些?Laravel 的一些主要功能是:
3) 您如何理解 Eloquent ORM?Eloquent ORM (对象关系映射) 是 Laravel 框架的主要功能之一。它可定义为活动记录模式的高级 PHP 实现。 活动记录模式是一种软件中存在的架构模式。它负责将内存中的对象数据保存在关系数据库中。 Eloquent ORM 还负责在强制执行数据库对象之间的关系约束的同时提供内部方法。Eloquent ORM 将数据库表表示为类,其对象实例与单个表行绑定,同时遵循活动记录模式。 4) Laravel 中的查询构建器是什么?Laravel 的查询构建器提供了对数据库更直接的访问,是 Eloquent ORM 的替代方案。它不需要直接编写 SQL 查询。相反,它提供了一组能够以编程方式构建查询的类和方法。它还允许对执行的查询结果进行特定缓存。 5) 写下 Laravel 查询构建器提供的一些聚合方法的名称。查询构建器提供的一些方法是:
6) 什么是路由?所有 Laravel 路由都在路由文件中定义,这些文件存储在 routes 目录中。这些文件由 MVC 框架加载。routes/web.php 文件定义了可用于 Web 界面的路由。这些路由被分配为 Web 中间件组,它提供了 会话状态 和 CSRF 保护等功能。routes/api.php 中可用的路由是无状态的,并被分配为 API 中间件组。对于大多数应用程序,应该从在 routes/web.php 文件中定义路由开始。 7) 您如何理解反向路由?Laravel 中的反向路由用于根据名称或符号生成 URL。它定义了链接与 Laravel 路由之间的关系,并且可以对路由进行后续更改以自动传播到相关链接。当使用现有路由的名称生成链接时,Laravel 会自动生成相应的统一资源标识符 (URI)。反向路由为应用程序提供了灵活性,并帮助开发人员编写更清晰的代码。 路由声明 可以使用反向路由创建指向它的链接,该链接可以进一步传递我们定义的任何参数。如果未提供可选参数,它们将自动从生成的链接中删除。 通过使用它,将自动创建诸如 https://abc.go.com/login 的 URL。 8) 您将如何描述 Laravel 中的 Bundles?在 Laravel 中,Bundles 也称为 Packages(包)。包是向 Laravel 添加更多功能的主要方式。包可以是任何东西,从像 Carbon 这样处理日期的好方法,到像 Behat 这样完整的 BDD 测试框架。Laravel 还支持创建自定义包。 包有不同类型。其中一些是独立包。这意味着它们可以与任何 PHP 框架一起工作。像 Carbon 和 Behat 这样的框架就是独立包的例子。其他包旨在与 Laravel 一起使用。这些包可能包含路由、控制器、视图和配置,这些主要是为了增强 Laravel 应用程序。 9) 什么是 Composer,我们如何通过 Composer 安装 Laravel?Composer 是 PHP 中的一个依赖管理器。它管理项目所需的依赖项。这意味着 Composer 将提取所有必要的库、依赖项,并将其全部管理在一个地方。 Laravel 安装步骤
10) Laravel 支持缓存吗?是的,Laravel 支持流行的缓存后端,如 Memcached 和 Redis。 默认情况下,Laravel 配置为使用文件缓存驱动程序,该驱动程序用于将序列化或缓存的对象存储在文件系统中。对于大型项目,建议使用 Memcached 或 Redis。 11) 如何清除 Laravel 中的缓存?下面给出了清除 Laravel 缓存的语法:
12) 您将如何解释 Laravel 中的中间件?顾名思义,中间件充当请求和响应之间的中间人。中间件是一种 HTTP 请求过滤机制。例如,Laravel 包含中间件,用于验证应用程序用户是否已通过身份验证。如果用户已通过身份验证并尝试访问仪表板,则中间件将把该用户重定向到主页;否则,用户将被重定向到登录页面。 Laravel 中有两种类型的中间件: 全局中间件 它将在应用程序的每个 HTTP 请求上运行。 路由中间件 它将被分配给特定的路由。 语法 示例 现在,UserMiddleware.php 文件将在 app/Http/Middleware 中创建。 ![]() 13) 您如何理解 Laravel 中的数据库迁移?我们如何使用它?迁移可以定义为数据库的版本控制,它允许我们轻松修改和共享应用程序的数据库模式。迁移通常与 Laravel 的模式构建器 配对使用,以轻松构建应用程序的数据库模式。 迁移文件包含两个方法,up() 和 down()。up() 方法用于向数据库添加新表、列或索引,而 down() 方法用于反转 up() 方法执行的操作。 我们可以使用 make:migration 生成迁移及其文件。 语法 通过使用它,将在 database/migrations 中创建一个当前日期的 blog.php 文件。 14) 您对 Laravel 中的服务提供者有什么了解?服务提供者可以定义为配置所有整个 Laravel 应用程序的中心位置。应用程序以及 Laravel 的核心服务都是通过服务提供者进行引导的。这些是维护类依赖项和执行依赖注入的强大工具。服务提供者还指示 Laravel 将各种组件绑定到 Laravel 的服务容器中。 这里给出了一个 Artisan 命令,可用于生成服务提供者: 几乎所有服务提供者都扩展了 Illuminate\Support\ServiceProvider 类。大多数服务提供者在其文件中包含以下列出的函数:
在 Register() 方法中,只应该将内容绑定到服务容器中。不应该尝试在 Register() 方法中注册任何事件监听器、路由或任何其他功能片段。 15) 如何使用 Laravel 中的查询获取两个日期之间的数据?我们可以使用 whereBetween() 方法通过查询检索两个日期之间的数据。 示例 16) 您对 Laravel 中的 CSRF 令牌有什么了解?如何关闭特定路由的 CSRF 保护?CSRF 保护代表 跨站请求伪造 保护。CSRF 通过系统未经授权的用户检测对 Web 应用程序的未经授权攻击。内置的 CSRF 插件用于创建 CSRF 令牌,以便它可以验证活动已认证用户发送的所有操作和请求。 要关闭特定路由的 CSRF 保护,我们可以将该特定 URL 或路由添加到 app\Http\Middleware\VerifyCsrfToken.php 文件中存在的 $except 变量中。 示例 17) 列出 Laravel 提供的一些官方包?Laravel 提供了一些官方包,如下所示: Cashier Laravel Cashier 实现了一个富有表现力、流畅的接口,用于 Stripe 和 Braintree 的订阅计费服务。它控制了几乎所有您不愿编写的样板订阅计费代码。此外,Cashier 还可以控制优惠券、订阅数量、交换订阅、取消宽限期,甚至生成发票 PDF。 Envoy Laravel Envoy 负责为我们远程服务器上运行的频繁任务提供简洁、最少的语法。使用 Blade 风格的语法,可以快速安排部署、Artisan 命令等任务。Envoy 只支持 Mac 和 Linux。 护照 Laravel 用于借助 Laravel Passport 轻而易举地创建 API 身份验证。它进一步在几分钟内为 Laravel 应用程序提供了完整的 Oauth2 服务器实现。Passport 通常构建在 League OAuth2 服务器之上,该服务器由 Alex Bilbie 维护。 Scout Laravel Scout 用于提供一个简单的、基于驱动的解决方案,以向 Eloquent 模型添加全文搜索。使用模型观察者,Scout 会自动使搜索索引与 Eloquent 记录同步。 Socialite Laravel Socialite 用于为 Facebook、Twitter、Google 和 Linkedln 等的 OAuth 身份验证提供富有表现力、流畅的接口。它控制了几乎所有您不愿编写的样板社交身份验证代码。 18) 您如何理解单元测试?单元测试是作为 Laravel 不可或缺的一部分而提供的内置测试。它包含单元测试,用于检测和防止框架中的回归。单元测试可以通过可用的 Artisan 命令行工具运行。 19) 您对 Laravel 中的 Facades 有何了解?请解释。Laravel Facades 提供静态接口类,这些类在应用程序的服务容器中可用。Laravel 自身带有几个可用的 Facades,可以访问 Laravel 的几乎所有功能。Facades 还有助于直接从容器本身访问服务。它在 Illuminate\Support\Facades 命名空间中描述。因此,它易于使用。 示例 ![]() 20) 如何检查 Laravel 当前版本?可以使用 Artisan 命令的 -version 选项轻松检查 Laravel 安装的当前版本。 21) 您将如何解释 Laravel 中的 dd() 函数?dd 代表“Dump and Die”(转储并终止)。Laravel 的 dd() 函数可以定义为一个辅助函数,用于将变量内容转储到浏览器并阻止后续脚本执行。 示例 22) 您对 PHP Artisan 有何了解?请提及一些 Artisan 命令。PHP Artisan 是 Laravel 提供的一个命令行界面/工具。它包含几个有用的命令,在构建应用程序时会有帮助。下面列出了一些 Artisan 命令: PHP artisan list “list”命令用于查看所有可用 Artisan 命令的列表。 PHP artisan help 每个命令还包含一个“help”屏幕,用于显示和描述命令可用的参数和选项。要显示帮助屏幕,请运行“help”命令。 PHP artisan tinker Laravel 的 Artisan Tinker 是一个 repl (Read-Eval-Print Loop,读取-评估-打印循环)。使用 Tinker,可以通过命令行编写实际的 PHP 代码。甚至可以更新或删除数据库中的表记录。 PHP artisan -version 通过使用此命令,可以查看 Laravel 安装的当前版本。 PHP artisan make model model_name 此命令在“app”目录下创建模型“model_name.php”。 PHP artisan make controller controller_name 此命令用于在 app/Http/Controllers 文件夹中构建新的控制器文件。 23) 您将如何解释 Laravel 中的事件?事件是程序识别和处理的活动或发生。Laravel 中的事件提供简单的观察者实现,允许我们订阅和监听应用程序中的事件。事件类存储在 app/Events 中,而它们的监听器存储在应用程序的 app/Listeners 中。这些可以通过 Artisan 控制台命令生成。单个事件可以包含多个不相互依赖的监听器。 Laravel 中有一些事件示例,例如:
24) Laravel 中的验证是什么?验证是 Laravel 用于验证应用程序中传入数据的方法。 它们是一种方便的方法,可以确保数据在进入数据库之前是干净且预期的格式。Laravel 包含几种不同的方法来验证应用程序的传入数据。默认情况下,Laravel 的基本控制器类使用 ValidatesRequests trait,借助强大的验证规则来验证所有传入的 HTTP 请求。 25) 您如何理解 Lumen?Lumen 是一个基于 Laravel 核心组件构建的 PHP 微框架。它由 Taylor Otwell(Laravel 的创建者)创建。它旨在用于构建基于 Laravel 的微服务和极速 API。它是可用的最快的微框架之一。Lumen 不是像 Laravel 那样完整的 Web 框架,仅用于创建 API。因此,大多数组件,如 HTTP 会话、cookie 和模板,都从 Lumen 中排除。Lumen 支持日志记录、路由、缓存队列、验证、错误处理、中间件、依赖注入、控制器、Blade 模板、命令调度器、数据库抽象、服务容器和 Eloquent ORM 等功能。 可以通过运行以下命令使用 Composer 安装 Lumen: 26) Laravel 使用哪个模板引擎?Blade 是 Laravel 提供的一个简单但功能强大的模板引擎。在视图中使用 PHP 代码没有限制。所有 Blade 视图都编译成简单的 PHP 代码并缓存,直到它们被修改。Blade 对我们的应用程序几乎没有额外的开销。Laravel 中的 Blade 视图文件使用 .blade.php 文件扩展名,并保存在 resources/views 目录中。 27) 解释服务容器及其优点。Laravel 中的服务容器是最强大的功能之一。它是解决类依赖项和在 Laravel 中执行依赖注入的重要而强大的工具。它也称为 IoC 容器。 依赖注入是一个术语,其本质上意味着类依赖项通过构造函数或在某些情况下通过“setter”方法“注入”到类中。 服务容器的优点:
28) 您对 Laravel Contracts 有何了解?Laravel 的 Contracts 是一组接口,负责定义 Laravel 框架提供的服务的核心功能。 ![]() 29) 您将如何解释 Laravel 中的 Homestead?Homestead 是一个官方的、预打包的 Vagrant 虚拟机,它为 Laravel 开发人员提供了开箱即用的开发 Laravel 所需的所有工具。它还包括 Ubuntu、Gulp、Bower 和其他对开发大型 Web 应用程序有用的开发工具。它提供了一个开发环境,无需在机器上额外安装 PHP、Web 服务器或任何其他服务器软件即可使用。 30) Laravel 和 CodeIgniter 有什么区别?
31) 如何在 Laravel 中获取用户的 IP 地址?我们可以使用以下方法获取用户的 IP 地址: 32) 如何在 Laravel 中使用自定义表?通过重写 Eloquent 的 protected $table 属性,我们可以轻松地在 Laravel 中使用自定义表。示例如下: 33) Laravel 中 Eloquent cursor() 方法有什么用?cursor 方法允许我们使用游标遍历数据库,这只会执行一个查询。在处理大量数据时,cursor 方法可以大大减少内存使用。 示例 34) 您将如何在 Laravel 中创建一个辅助文件?我们可以按照以下步骤使用 Composer 创建一个辅助文件: 在 app 文件夹中创建一个名为“app/helpers.php”的文件。 添加 在“autoload”变量中。 现在使用 composer dump-autoload 或 composer update 更新 composer.json。 35) Laravel 5.8 的要求是什么?
36) 在 Laravel 中,控制器存放在哪个目录?控制器存放在 app/http/Controllers 目录中。 37) PHP compact 函数有什么用?PHP compact 函数接收每个键并尝试搜索同名变量。如果找到变量,它会构建一个关联数组。 38) Laravel 4 和 Laravel 5.x 的主要区别是什么?Laravel 4 和 Laravel 5.x 的主要区别如下:
39) 解释 Laravel 相对于其他 PHP 框架的一些优点。Laravel 相对于其他 PHP 框架有一些优点,可以考虑:
40) Laravel Eloquent 中有哪些类型的关系?Laravel Eloquent ORM 支持以下类型的关系:
41) 您如何理解 ORM?ORM 代表 对象关系映射。它是一种编程技术,用于在面向对象编程语言中不兼容的类型系统之间转换数据。 42) 我们如何在 Laravel 中实现一个包?我们可以通过以下方式在 Laravel 中实现一个包:
43) 您对 Laravel 中的 Traits 有何了解?PHP Traits 是一组方法,可以包含在另一个类中。Trait 不能像抽象类那样单独实例化。Trait 的创建是为了减少 PHP 中单一继承的限制。它允许开发人员在不同类层次结构中的各种独立类中自由重用一组方法。 示例 然后我们可以将此 Trait 包含在其他类中,例如: 现在,如果我们想从这些类创建新对象,我们会发现它们都具有 share() 方法。 44) 如何在 Laravel 中更改默认数据库类型?Laravel 默认配置为使用 MySQL。 要更改其默认数据库类型,请编辑文件 config/database.php。
通过使用它,MySQL 更改为 SQLite。 45) 我们如何在 Laravel 5 中使用维护模式?当应用程序处于维护模式时,所有对应用程序的请求都会显示一个自定义视图。这使得在应用程序更新或执行维护时“禁用”应用程序变得容易。维护模式检查已添加到应用程序的默认中间件堆栈中。当应用程序处于维护模式时,将抛出状态码为 503 的 MaintenanceModeException。 我们可以通过执行以下命令来启用或禁用 Laravel 5 中的维护模式: 46) 如何使用 Eloquent 在 Laravel 中创建记录?如果要在 Laravel Eloquent 中创建新的数据库记录,我们需要创建一个新的模型实例。然后需要设置模型的属性并调用 save() 方法。 示例 47) 如何在 Laravel 中检查登录用户的信息?User() 函数用于获取登录用户。 示例 48) 您将如何解释 Laravel 模型中的 Fillable 属性?在 Eloquent ORM 中,$fillable 属性是一个数组,包含可以使用批量赋值填充的所有表字段。 批量赋值是指向模型发送一个数组,以直接在数据库中创建新记录。 代码来源 49) 您将如何解释 Laravel 模型中的 Guarded 属性?guarded 属性与 fillable 属性相反。 在 Laravel 中,fillable 属性用于指定要批量赋值的字段。guarded 属性用于指定不可批量赋值的字段。 代码来源 如果我们要阻止所有字段进行批量赋值,我们可以使用: $fillable 充当“白名单”,而 $guarded 函数充当“黑名单”。应该使用 $fillable 或 $guarded 中的一个。 50) 您对 Laravel 中的 Closures 有何了解?在 Laravel 中,Closure 是一种匿名方法,可用作 回调 函数。它也可以用作函数中的参数。可以将参数传递给 Closure。这可以通过更改 handle() 方法中的 Closure 函数调用来为它提供参数来完成。Closure 可以访问变量作用域之外的变量。 示例 它通过向 handle() 方法添加一个 Closure 参数来启动。我们可以调用 handle() 方法并传递一个服务作为参数。 通过在 handle() 方法中使用 $closure();,我们告诉 Laravel 执行给定的 Closure,然后它将显示“面试问题”。
|
我们请求您订阅我们的新闻通讯以获取最新更新。