laravel创建全局公共函数,Helper类
laravel创建公共函数,Helper类
提出问题:
在任何一个PHP框架中,都不可能将你所有的需求封装好,也一定有些需求是你特有的,如果这些需要只用一次,那么哪里用哪里写即可。但是如果有经常使用的函数,而laravel并没有为我们封装,因此就需要自己封装,那么在laravel框架中,自己想要封装全局性的公共函数,该如何操作呢?另外封装后能否拿来即用,不要做太多的导入工作呢?下面就和我一起来探索吧。
分析问题:
对上述提出的问题进行分析,不难发现有这么几个需要关注的点。
- 这些函数需要全局的,也就是在laravel使用的过程中,任何一个地方都可以随时调用
- 不需要在用之前导入什么,也就是这些方法必须是,用即在,不用则走的状态。
- 这些写法还必须满足laravel和PHP的基本语法和规则,不能随便定义
- 定义这些方法时,不能重名
- 我们不可能把所有的方法一次封装完,因此就需要后续扩展简单,这就要求框架必须提前搭好,后续只是添加内容而已
经过上述的分析,我们的目的已经非常明确了,那么下来该如何去实现这些目的呢,一起来吧!
知识储备
providers (提供者)
laravel中有一个非常重要的概念,就是容器,那么往这些容器里面加什么呢,就可以加入提供者,也就是这里的 providers 。打开laravel项目的 app/Providers 目录,可以看到这里面已经有非常多的Providers ,有个是 AppService ,有的是AuthService等,各自有各自的功能,那么我们可以自己在该文件夹中定义自己的providers ,当然是可以的。
参考资料:
https://laravel.com/docs/8.x/providers
Helpers (助手)
laravel中自带了很多的助手方法,我们想要做的就是对这些方法进行扩充,根据我们自己的需求今天添加。
参考资料:
https://laravel.com/docs/8.x/helpers
解决步骤
自定义一个providers
在项目的根目录打开命令行输入下面的命令创建一个providers,名称叫HelperServiceProvider
php artisan make:provider HelperServiceProvider
注册提供器
所有服务提供器都在 config/app.php 配置文件中注册。该文件中有一个 providers 数组,用于存放服务提供器的类名 。默认情况下,这个数组列出了一系列 Laravel 核心服务提供器。这些服务提供器引导 Laravel 核心组件,例如邮件、队列、缓存等。
要注册提供器,只需要将其添加到数组:
'providers' => [
// 其他服务提供器
App\Providers\ComposerServiceProvider::class,
],
编辑自定义的HelperServiceProvider
打开刚才创建的文件app/Providers/HelperServiceProvider.php,并键入下面的内容,看起来是这样的。其中的register就是提供器的工作内容,可以看到他将获取 app/Helpers 文件夹下所有的php文件,并尝试require(引用)它。从这里我们也可以看出,将来我们定义的所有全局公共函数将放在该文件夹下。
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelperServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
foreach (glob(app_path('Helpers') . '/*.php') as $file) {
require_once $file;
}
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
创建文件夹并自定义Helpers方法
经过上面的代码,我们知道了公共方法定义的位置,下来我们就来创建吧。首先:创建文件夹 app/Helpers
创建公共函数文件
在该文件下创建你想要定义的函数文件名,比如string.php
。也可以对公共函数不进行分类统一的放在functions.php
文件中都是可以的。
下面是笔者根据项目需求创建的目录结构和文件内容
文件结构:
文件内容:
使用和注意
至此,我们创建的公共函数已经完成了,接下来你可以在项目的任何地方使用自定义的函数了,比如笔者建立的strEncrypt() 字符串加密函数
注意
在创建函数的时候最好对函数是否已经存在进行判断,因此这里的函数是全局使用,因此有可能带来重名的风险。
另外就是创建的函数名尽量简单易懂。起名是程序员永远的伤痛