在 Laravel 项目中创建您自己的 PHP 助手

发布日期 经过

Laravel 提供了许多优秀的 辅助函数 可以方便地执行诸如处理数组、文件路径、字符串和路由等操作,以及其他类似的操作 dd() 功能。

您还可以为 Laravel 应用程序和 PHP 包定义自己的一组辅助函数,方法是使用 Composer 自动导入它们。

如果您是 Laravel 或 PHP 的新手,让我们介绍一下如何创建自己的帮助器函数,由 Laravel 自动加载。

在 Laravel 应用程序中创建 Helpers 文件

您可能想要包含辅助函数的第一个场景是在 Laravel 应用程序的上下文中。根据您的喜好,您可以根据需要组织帮助文件的位置,但是,这里有一些建议的位置:

  • app/helpers.php
  • app/Http/helpers.php

我更喜欢把我的留在 app/helpers.php 在应用程序命名空间的根目录中。

自动加载

要使用 PHP 辅助函数,您需要在运行时将它们加载到您的程序中。在我职业生涯的早期,在文件顶部看到这种代码并不罕见:

require_once '/helpers.php' ;

PHP 函数无法自动加载。然而,我们通过 Composer 有一个比使用更好的解决方案 require 或者 require_once

如果你创建一个新的 Laravel 项目,你会看到 autoloadautoload-dev 键在 composer.json 文件:

“自动加载” :{
“类映射” :[
“数据库/种子” ,
“数据库/工厂”
],
“psr-4” :{
“应用程序\\” : “应用程序/”
}
},
“自动加载设备” :{
“psr-4” :{
“测试” : "tests/"
}
},

如果你想添加一个帮助文件,composer 有一个 files 您可以在其中定义的键(这是一个文件路径数组) autoload :

“自动加载” :{
“文件” :[
"app/helpers.php"
],
“类映射” :[
“数据库/种子” ,
“数据库/工厂”
],
“psr-4” :{
“应用程序\\” : “应用程序/”
}
},

添加新路径后 files 数组,您需要转储自动加载器:

作曲家 转储自动加载

现在,对于每个请求,helpers.php 文件都会自动加载,因为 Laravel 需要 Composer 的自动加载器 public/index.php :

要求 __你__ '/../vendor/autoload.php' ;

定义函数

在助手类中定义函数是很容易的部分,尽管有一些注意事项。所有 Laravel 帮助程序文件都包含在检查中以避免函数定义冲突:

如果 function_exists 'env' )){
功能 环境 ($key,$default = 无效的 ){
// ...
}
}

这可能会变得很棘手,因为您可能会遇到这样的情况:您使用的函数定义是您没有预料到的(基于第一个定义的函数定义)。

我更喜欢使用 function_exists 检查我的应用程序助手,但是如果您在应用程序的上下文中定义助手,那么您 可以 放弃 function_exists 查看。

通过跳过检查,每当您的助手重新定义函数时,您都会看到冲突,这可能很有用。

在实践中,冲突并不像您想象的那么频繁发生,并且您应该确保定义的函数名称不是过于通用。您还可以为函数名称添加前缀,以减少它们与其他依赖项发生冲突的可能性。

帮助示例

我喜欢在定义资源丰富的路线时免费获得的 Rails 路径和 URL 帮助程序。例如,一个 photos 资源路由会暴露路由助手,例如 new_photo_path 、编辑照片路径`等

当我在 Laravel 中使用资源路由时,我喜欢添加一些辅助函数,以便更轻松地在模板中定义路由。在我的实现中,我喜欢有一个 URL 辅助函数,我可以传递 Eloquent 模型并使用我定义的约定获取资源路由,例如:

创建路由 (模型)
编辑路线 (模型)
显示路线 (模型)
销毁路由 (模型)

您可以按照以下方式定义 show_route 在你的 app/helpers.php 文件(其他看起来类似):

如果 function_exists 'show_route' )){
功能 显示路线 (模型,资源) = 无效的
{
资源 = 资源 ?? plural_from_model (模型)
返回 路线 "{ 资源 }。展示” ,$model);
}
}
如果 function_exists 'plural_from_model' )){
功能 plural_from_model (模型)
{
复数 = 力量 :: 复数 类基名称 (模型)
返回 力量 :: 烤肉串 (复数)
}
}

plural_from_model() function 只是一些可重用的代码,辅助路由函数使用它们来根据我喜欢的命名约定(模型的短横线复数形式)预测路由资源名称。

例如,以下是从模型派生的资源名称的示例:

$模型 = 新的 应用程序\行项目 ;
plural_from_model (模型)
// => 行项目
plural_from_model 新的 应用\用户 (英文):
// => 用户

使用此约定,您可以像这样定义资源路由 routes/web.php :

路线 :: 资源 'line-items' , 'LineItemsController' (英文):
路线 :: 资源 “用户” , 'UsersController' (英文):

然后在刀片模板中,您可以执行以下操作:

< A 頁面 = {{ 显示路线 ($lineItem) }} >
{{ $lineItem -> 姓名 }}
</ A >

这会产生类似以下 HTML 的内容:

< A 頁面 = "http://localhost/line-items/1" >
第 1 项
</ A >

套餐

您的 Composer 包还可以使用帮助程序文件来实现您希望为使用您的包的项目提供的任何帮助程序函数。

您将在包的 composer.json 文件,定义一个 files 包含一系列辅助文件的密钥。

您必须添加 function_exists() 检查您的辅助函数,以便使用您的代码的项目不会因命名冲突而中断。

您应该选择对您的包来说唯一的正确函数名称,如果您担心函数名称太通用,请考虑使用短前缀。

了解更多

看看作曲家的 自动加载 文档以了解有关包含文件的更多信息以及有关自动加载类的一般信息。

保罗·雷德蒙德照片

Laravel News 特约撰稿人。全栈 Web 开发人员兼作家。

归档于:
立方体

Laravel 时事通讯

加入超过 4 万名开发者的行列,不错过任何新的技巧、教程等内容。

图像
Laravel 代码审查

几天内即可获得 Laravel 代码审查方面的专家指导

访问 Laravel 代码审查
Kirschbaum 标志

樱桃树

提供创新和稳定性,确保您的Web应用程序取得成功。

樱桃树
Laravel Cloud 标志

Laravel 云

轻松创建和管理服务器,并在几秒钟内部署 Laravel 应用程序。

Laravel 云
鱼叉:新一代时间跟踪和发票标志

Harpoon:新一代时间跟踪和发票系统

新一代时间跟踪和计费软件,帮助您的机构规划和预测盈利的未来。

Harpoon:新一代时间跟踪和发票系统
Shift 标志

转移

还在运行旧版本的 Laravel?立即实现 Laravel 自动升级和代码现代化,让您的应用程序保持最新状态。

转移
Tinkerwell 徽标

廷克威尔

Laravel 开发者必备的代码运行器。可在本地和生产环境中体验 AI、自动补全和即时反馈功能。

廷克威尔
SaaSykit:Laravel SaaS 入门套件徽标

SaaSykit:Laravel SaaS 入门套件

SaaSykit 是一个多租户 Laravel SaaS 入门套件,包含运行现代 SaaS 所需的所有功能,例如支付、美观的结账界面、管理面板、用户仪表盘、身份验证、现成组件、统计数据、博客、文档等等。

SaaSykit:Laravel SaaS 入门套件
了解 Softtech 的标志

了解软科技

Acquaint Softtech 提供 AI 就绪的 Laravel 开发人员,48 小时内即可上手,每月费用为 3000 美元,没有冗长的销售流程,并提供 100% 退款保证。

了解软科技
Lucky Media 标志

幸运传媒

Get Lucky Now——拥有十余年经验的 Laravel 开发理想之选!

幸运传媒
绝不妥协标志

绝不妥协

来自 No Compromises 播客的两位经验丰富的开发者 Joel 和 Aaron 现在可以为您的 Laravel 项目提供服务。⬧ 固定费用 9500 美元/月。⬧ 无冗长的销售流程。⬧ 无需签订合同。⬧ 100% 退款保证。

绝不妥协
PhpStorm 标志

PhpStorm

首选的 PHP IDE,对 Laravel 及其生态系统提供广泛的开箱即用支持。

PhpStorm
工具包:适用于 Laravel AI SDK 镜像的可重用 AI 工具

工具包:适用于 Laravel AI SDK 的可重用 AI 工具

阅读文章
Laracon US 2026 公布完整扬声器阵容图片

Laracon US 2026 公布完整演讲嘉宾阵容

阅读文章
PHP 2026 年发展状况调查现已开放(图片)

《2026年菲律宾比索发展状况调查》现已开放

阅读文章
使用 Laradocs 镜像在 Laravel 应用中实现版本控制文档

使用 Laradocs 在 Laravel 应用中实现版本控制文档

阅读文章
Laravel 13.15.0 中的类型化翻译访问器

Laravel 13.15.0 中的类型化翻译访问器

阅读文章
刷新 Laravel 数据库而不删除所有表图片

无需删除所有表即可刷新 Laravel 数据库

阅读文章