如何在 Laravel 中创建自己的辅助函数:分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么辅助函数是 Laravel 的必备工具

\n\n

如果你曾经使用过 Laravel 进行开发,你很可能遇到过这种情况:在控制器或模板中,你需要反复格式化日期、截断文本、检查权限或生成 slug。你从一个项目到另一个项目复制粘贴同一段代码,然后因为重复而咒骂自己。

\n\n

听起来很熟悉?欢迎加入这个行列。在 Stack Overflow 上,问题 "How to create custom helper functions in Laravel" 获得了数千次浏览——这并非偶然。辅助函数(或简称为“helpers”)是你对复制粘贴说“不”,对干净、可复用代码说“是”的方式。

\n\n

在本教程中,我们不仅仅展示如何创建你的第一个辅助函数。我们将讲解 三种经过验证的方法——从最简单到通过 Composer 自动加载的高级方法。你将学习如何组织辅助函数,使其不会变成垃圾场,以及如何轻松地测试它们。

\n\n

我们开始吧!

\n\n

什么是辅助函数,为什么需要它?

\n\n

辅助函数是一个普通的 PHP 函数,用于执行一个特定的任务。Laravel 已经内置了一些辅助函数:str_slug()、route()、config() 等。但迟早你会需要一些自己的函数——例如,用于格式化电话号码或生成唯一标识符的函数。

\n\n

自定义辅助函数的优点:

\n
    \n
  • 代码复用——编写一次,随处使用。
  • \n
  • 可读性——用 formatPhone($number) 代替 10 行条件语句。
  • \n
  • 可测试性——辅助函数易于进行单元测试。
  • \n
  • 集中管理——在一个地方更改逻辑,它就会应用到整个项目中。
  • \n
\n\n

但这里也有一个陷阱:辅助函数组织不当可能会使你的项目变得混乱。因此,让我们从一开始就正确地做。

\n\n

方法 1:经典方法——手动创建 helpers.php 文件

\n\n

这是对初学者来说最简单、最直接的方法。创建一个 app/helpers.php 文件,并在 composer.json 中引入它。

\n\n

步骤 1. 创建 helpers.php 文件

\n\n

进入你的 Laravel 项目根目录,创建一个 app/helpers.php 文件。在里面编写一个简单的函数:

\n\n
<?php\n\nif (!function_exists('formatDate')) {\n    function formatDate($date, $format = 'd.m.Y')\n    {\n        if (!$date) {\n            return null;\n        }\n        return Carbon\\Carbon::parse($date)->format($format);\n    }\n}
\n\n

注意 if (!function_exists(...)) 这个包装。这是一种防止冲突的保护措施,以防该函数已在其他地方定义。始终使用这个结构。

\n\n

步骤 2. 通过 Composer 引入文件

\n\n

打开 composer.json,在 autoload 部分添加:

\n\n
"files": [\n    "app/helpers.php"\n]
\n\n

最终结果应该类似于这样:

\n\n
"autoload": {\n    "psr-4": {\n        "App\\\\": "app/"\n    },\n    "files": [\n        "app/helpers.php"\n    ]\n}
\n\n

现在在终端中执行命令:

\n\n
composer dump-autoload
\n\n

搞定!现在你可以在 Laravel 应用程序的任何地方使用 formatDate()——在控制器、模型、Blade 模板中。

\n\n

方法 2:通过服务提供者(更高级)

\n\n

如果你想严格控制何时以及加载哪些辅助函数,这种方法很合适。例如,如果你只有用于管理后台或 API 的辅助函数。

\n\n

步骤 1. 创建服务提供者

\n\n

执行 artisan 命令:

\n\n
php artisan make:provider HelperServiceProvider
\n\n

打开创建的文件 app/Providers/He

博客

书籍推荐