codeigniter-4 - 在 CodeIgniter 4 模块中添加自定义验证方法的最佳方法
问题描述
这是问题所在。我有一个名为 Contact 的模块。它位于一个名为 modules/Contact 的目录中。我在 app/Config/Autoload.php 中为模块注册了一个命名空间联系人。一切似乎都很好。现在我想使用自定义验证方法来验证来自表单字段的输入。我的问题是关于最好的方法。我的方法如下:根据 CI4 文档,Validation 类在用于验证时会加载 App/Config/Validation.php。在文件中有一个名为 $ruleSets 的公共属性,它指向一个数组,它包含具有验证规则的类的名称。我想将我自己的带有验证方法的类添加到这个数组中。根据关于验证的 CI4 文档,可以使用注册器更新配置类及其在 App/Config/ 中的公共属性。所以,我创建了一个这样的注册商,一个类,在我的联系人模块中。它位于 Contact\Config\Registrar.php 中。该类具有公共静态方法 Validation,它返回一个包含更新的 $ruleSet 的数组。新值是一个数组,包含所有标准验证类名称 + 我的验证类名称。问题是我在注册器中添加的公共静态方法验证似乎没有更改 App/Config/ 中定义的 $ruleSet 的值。Contact/Config/Registrar.php 已加载,但未调用其中包含的 Validation 方法。那么,添加自定义验证规则而无需更新超出我的模块的文件的最佳方法是什么?CI4 文档中关于注册商的内容很少。我是否误解了它们的工作方式以及应该如何使用它们?该类具有公共静态方法 Validation,它返回一个包含更新的 $ruleSet 的数组。新值是一个数组,包含所有标准验证类名称 + 我的验证类名称。问题是我在注册器中添加的公共静态方法验证似乎没有更改 App/Config/ 中定义的 $ruleSet 的值。Contact/Config/Registrar.php 已加载,但未调用其中包含的 Validation 方法。那么,添加自定义验证规则而无需更新超出我的模块的文件的最佳方法是什么?CI4 文档中关于注册商的内容很少。我是否误解了它们的工作方式以及应该如何使用它们?该类具有公共静态方法 Validation,它返回一个包含更新的 $ruleSet 的数组。新值是一个数组,包含所有标准验证类名称 + 我的验证类名称。问题是我在注册器中添加的公共静态方法验证似乎没有更改 App/Config/ 中定义的 $ruleSet 的值。Contact/Config/Registrar.php 已加载,但未调用其中包含的 Validation 方法。那么,添加自定义验证规则而无需更新超出我的模块的文件的最佳方法是什么?CI4 文档中关于注册商的内容很少。我是否误解了它们的工作方式以及应该如何使用它们?问题是我在注册器中添加的公共静态方法验证似乎没有更改 App/Config/ 中定义的 $ruleSet 的值。Contact/Config/Registrar.php 已加载,但未调用其中包含的 Validation 方法。那么,添加自定义验证规则而无需更新超出我的模块的文件的最佳方法是什么?CI4 文档中关于注册商的内容很少。我是否误解了它们的工作方式以及应该如何使用它们?问题是我在注册器中添加的公共静态方法验证似乎没有更改 App/Config/ 中定义的 $ruleSet 的值。Contact/Config/Registrar.php 已加载,但未调用其中包含的 Validation 方法。那么,添加自定义验证规则而无需更新超出我的模块的文件的最佳方法是什么?CI4 文档中关于注册商的内容很少。我是否误解了它们的工作方式以及应该如何使用它们?s 添加自定义验证规则而无需更新超出我的模块的文件的最佳方法?CI4 文档中关于注册商的内容很少。我是否误解了它们的工作方式以及应该如何使用它们?s 添加自定义验证规则而无需更新超出我的模块的文件的最佳方法?CI4 文档中关于注册商的内容很少。我是否误解了它们的工作方式以及应该如何使用它们?
解决方案
我遇到了同样的问题,我的解决方案是扩展验证类(总是欢迎更好的解决方案)。
例如,我想编写自己的 Auth 模块并使用自己的规则集。我的自定义验证类位于 acme/Auth/Config/AuthValidation.php 下
<?php
namespace Acme\Auth\Config;
use Config\Validation;
class AuthValidation extends Validation
{
public $login = [
'username' => 'required',
'password' => 'required',
];
}
这样,您的主应用程序中的所有验证规则都会被继承。您将在控制器中使用此代码来验证:
<?php
namespace Acme\Auth\Controllers;
use CodeIgniter\Controller;
use Acme\Auth\Config\AuthValidation as AuthValidation;
class Auth extends Controller
{
public function login()
{
//Instantiate the new AuthValidation class
$authValidationConfig = new AuthValidation();
//Since the validation class is a config for the validation service we set it for the validation service
$authValidation = \Config\Services::validation($authValidationConfig);
//Set the login rule from our AuthValidation class
$authValidation->setRuleGroup('login');
//Validate the request against our login rule
if($authValidation->withRequest($this->request)->run())
{
return 'Success';
}
else
{
return 'Failure';
}
}
}
这可能不是最好的解决方案,因为我对 CodeIgniter 还很陌生,但这就是我找到解决方法的方式。
旁注:主要问题似乎是传递给验证服务构造函数的类必须是“Config\Validation”的实例,所以我不得不扩展它。但是可能还有其他方法可以解决它。
随时纠正我:)
推荐阅读
- ios - xCode 项目导航中未生成 AmplifyConfig 文件夹
- reactjs - 如何使 React 组件的 props 类型相互依赖并自动推断
- windows - 从哪里获得 Android Studio Artic Fox 的卸载.exe 文件?
- kubernetes - Helmfile 注释
- multithreading - 是否可以在我的计算表达式中提供 setter 函数?
- reactjs - Unexpected behavior of React render props
- java - BCDChannel 中的 TDPU 参数。解压味精 JPOS ISO8583-93
- javascript - Var 返回“未定义”的 ASP.net mvc
- r - 如何更改 ggpubr/ggplot2 中的 p 值标签
- azure - Powershell : Get-AzureADGroupMember 获取嵌套组的所有成员