ashallendesign/laravel-config-validator

一个用于验证您的Laravel应用程序配置的包。

v2.6.1 2024-04-26 16:16 UTC

This package is auto-updated.

Last update: 2024-08-26 17:04:47 UTC


README

Latest Version on Packagist Build Status Total Downloads PHP from Packagist GitHub license

目录

概述

一个允许您验证配置值和环境的Laravel包。

安装

要求

该包已开发和测试,以确保与以下最低要求兼容

  • PHP 8.0
  • Laravel 8

安装包

您可以通过Composer安装此包

composer require ashallendesign/laravel-config-validator

发布默认规则集

为了帮助您开始验证应用程序的配置,Laravel Config Validator附带了一些默认规则集。要开始使用这些规则集,您可以使用以下命令发布它们

php artisan vendor:publish --tag=config-validator-defaults

上述命令将复制验证文件并将它们放置在项目根目录中的 config-validation 文件夹中。这些规则仅用于入门,因此文件中可能存在不适用于您的应用程序的规则。因此,一旦发布,您可以根据需要自由删除或编辑它们。

用法

创建验证规则集

使用生成命令

此包附带一个命令,您可以使用它来快速创建一个验证文件,以便立即开始使用。假设您想为 config/app.php 中的配置创建一个验证文件。为此,您可以使用以下命令

php artisan make:config-validation app

运行上述命令将在 config-validation/app.php 中创建一个文件,您可以开始添加配置验证。

规则集位置

为了验证您的应用程序配置,您需要首先定义验证规则。您可以通过在 config-validation 文件夹中的文件内放置它们来实现,文件名与您要验证的配置文件相匹配。例如,要验证 config/app.php 配置文件,您将创建一个名为 config-validation/app.php 的新文件,其中包含规则。

向规则集添加规则

一旦在 config-validation 文件夹中创建了规则集文件,您就可以开始添加验证规则。

在底层,Laravel Config Validator 使用内置的 Validator 类,因此使用起来应该很熟悉。要查看可用的Laravel验证规则,请点击此处 点击这里

例如,我们可能想向 app/mail.php 文件中的 driver 字段添加一个配置验证规则以确保它是一个受支持的字段。为此,我们可以在 config-validation/mail.php 中创建一个包含以下内容的文件

<?php

use AshAllenDesign\ConfigValidator\Services\Rule;

return [
    Rule::make('driver')->rules(['in:smtp,sendmail,mailgun,ses,postmark,log,array']),
    // ...
];

自定义验证错误消息

有时您可能需要覆盖特定验证规则的错误信息。这可以通过向Rule->messages()方法传递包含消息的数组来实现。此数组应遵循与标准Laravel Validator对象中使用的相同模式。

例如,我们可能想要添加一个配置验证规则,以确保app/mail.php文件中的driver字段是受支持的字段,并使用自定义错误信息。为此,我们可以更新我们的验证文件如下

<?php

use AshAllenDesign\ConfigValidator\Services\Rule;

return [
    Rule::make('driver')
        ->rules(['in:smtp,sendmail,mailgun,ses,postmark,log,array'])
        ->messages(['in' => 'The mail driver is invalid']),
    // ...
];

仅在特定应用程序环境中运行

您不一定希望在不同的环境中运行相同的规则。例如,您可能希望在本地开发环境中有一组宽松的验证规则,在生产环境中有一组更严格的规则。

要明确指定可以运行规则的 环境,您可以使用->environments()方法。如果没有定义环境,则规则将在所有环境中运行。

以下示例显示了如何设置两个不同的规则,一个用于生产,一个用于本地

<?php

use AshAllenDesign\ConfigValidator\Services\Rule;

return [
    Rule::make('driver')
        ->rules(['in:smtp,sendmail,mailgun,ses,postmark,log,array'])
        ->environments([Rule::ENV_LOCAL]),
    
    Rule::make('driver')
        ->rules(['in:mailgun'])
        ->environments([Rule::ENV_PRODUCTION])
];

运行验证

手动运行验证

要运行配置验证,您可以在ConfigValidator对象上调用->run()方法。以下示例显示了如何在控制器中这样做

<?php
    
namespace App\Http\Controllers;

use AshAllenDesign\ConfigValidator\Services\ConfigValidator;

class TestController extends Controller
{
    public function index()
    {
        $configValidator = new ConfigValidator();

        $configValidator->run();

        return response()->json(['success' => true]);
    }
}
仅在所选配置文件上运行

您不一定希望验证应用程序中的所有配置值。因此,您可以通过将配置名称传递给->run()方法作为第一个参数来指定您希望验证的配置文件。例如,如果您只想验证auth.php配置文件,可以使用以下内容

$configValidator = new ConfigValidator();

$configValidator->run(['auth']);
自定义文件夹路径

如果您没有在默认的config/validation文件夹中存储验证文件,您可以将自定义文件夹路径传递给->run()方法作为第二个参数。例如,如果您将文件存储在app/Custom/Validation文件夹中,可以使用以下内容

$configValidator = new ConfigValidator();

$configValidator->run([], 'app/Custom/Validation');
使用内联规则运行验证器

有时您可能希望使用内联规则而不是使用配置验证文件中定义的规则来运行验证器。如果您想要运行一次性的验证检查,或验证您维护的包内的配置值,这很有用。

为此,您可以使用如下所示的runInline方法

use AshAllenDesign\ConfigValidator\Services\ConfigValidator;
use AshAllenDesign\ConfigValidator\Services\Rule;

$configValidator = new ConfigValidator();

$configValidator->runInline([
    'app' => [
        Rule::make('env')->rules(['in:local,production']),
        Rule::make('debug')->rules(['boolean']),
    ],
    'mail' => [
        Rule::make('driver')->rules(['in:smtp,sendmail,mailgun,ses,postmark,log,array']),
    ],
]);

在上面的示例中,我们正在为appmail配置文件运行带有内联规则的验证器。规则与我们在配置验证文件中定义的规则相同。

runInline方法的行为与run方法相同。如果验证失败,它将抛出一个异常;如果已将throwExceptionOnFailure方法设置为false,则返回一个布尔值。

使用命令

此库附带了一个有用的命令,您可以使用它来验证配置。要使用它,您可以在命令行中运行以下命令

php artisan config:validate
仅在所选配置文件上运行(命令)

您不一定希望验证应用程序中的所有配置值。因此,您可以在命令中使用--files选项来指定您想要验证的配置文件。例如,如果您只想验证auth.php配置文件,可以使用以下内容

php artisan config:validate --files=auth

作为一个更进一步的示例,如果您想验证auth.phpapp.php文件,可以使用以下内容

php artisan config:validate --files=auth,app
自定义文件夹路径(命令)

如果您没有在默认的config/validation文件夹中存储验证文件,您可以将自定义文件夹路径传递给--path选项。例如,如果您将文件存储在app/Custom/Validation文件夹中,可以使用以下内容

php artisan config:validate --path=app/Custom/Validation

使用服务提供者

您可能希望在每个请求上自动运行配置验证器以确保您有正确的配置。这对于您在本地环境中并且经常在Git分支之间切换尤其有用。但是,出于性能原因,您可能不希望在生产环境中始终自动运行。要自动在每个请求上运行验证,您可以将其添加到服务提供者的boot方法中。

以下示例展示了如何仅使用 AppServiceProvider 在本地环境中运行验证。

<?php

namespace App\Providers;

use AshAllenDesign\ConfigValidator\Services\ConfigValidator;
use Illuminate\Support\Facades\App;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot(ConfigValidator $configValidator)
    {
        if (App::environment() === 'local') {
            $configValidator->run();
        }
    }
}

抛出和防止异常

默认情况下,如果验证失败,ConfigValidator 将抛出 InvalidConfigValueException 异常。该异常将包含第一个验证失败的配置值的错误消息。您可以通过使用 ->throwExceptionOnFailure() 方法来防止抛出异常,并依赖于 ->run() 方法的布尔返回值。

通过防止抛出任何异常,您可以使用 ->errors() 方法轻松获取所有验证失败的错误。这将返回错误数组。

以下示例展示了如何防止抛出任何异常,以便您可以获取错误。

$configValidator = new ConfigValidator();

$configValidator->throwExceptionOnFailure(false)
                ->run();

$errors = $configValidator->errors();

外观

如果您喜欢在 Laravel 中使用外观,可以选择使用提供的 ConfigValidator 外观,而不是手动实例化 AshAllenDesign\ConfigValidator\Classes\ConfigValidator 类。

以下示例展示了如何使用外观来运行配置验证。

<?php
    
namespace App\Http\Controllers;

use ConfigValidator;

class TestController extends Controller
{
    public function index()
    {
        ConfigValidator::run();

        return response()->json(['success' => true]);
    }
}

安全性

如果您发现任何安全问题,请直接联系我 mail@ashallendesign.co.uk 来报告。

贡献

如果您想对包进行任何更改或改进,请随意提交拉取请求。

注意:很快将添加贡献指南。

变更日志

查看 CHANGELOG 以获取有关最新更改的更多信息。

升级

查看 UPGRADE 指南以获取有关如何更新此库到较新版本的更多信息。

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件

支持我

如果您觉得这个包很有用,请考虑购买 Battle Ready Laravel 以支持我的工作和努力。

每一次销售对我都有巨大的影响,并允许我花更多的时间在开源项目和教程上。

为了表达深深的感谢,您可以使用代码 BATTLE20 来获得书籍的 20% 折扣。

👉 购买您的副本!

Battle Ready Laravel