laravel - laravel 5.4 中的自定义表单验证,不使用 AppServiceProvider boot() 方法
问题描述
目前我有一个我正在验证的表格,如下所示:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
\Validator::extend('custom_validation',function($attribute, $value, $parameters){
//validation logic
});
}
...
但是有没有一种方法可以避免将这种方法放在AppServiceProvider
(或为此提供的任何服务)中?
例如,我有没有办法将它插入控制器类中的某个位置(为简单起见)?
我喜欢使用创建请求类(扩展FormRequest
)之类的变体,但不确定如何将自定义方法添加到请求类。
任何建议将不胜感激。谢谢
解决方案
将验证规则分解为实现Illuminate\Contracts\Validation\Rule
合同的类。(参见“使用规则对象”一节1。)
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class CustomValidation implements Rule
{
public function passes($attribute, $value)
{
// validation logic
}
public function message()
{
return 'validation error';
}
}
然后有一个自定义表单请求扩展Illuminate\Foundation\Http\FormRequest
2
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use App\Rules\CustomValidation;
class CustomFormRequest extends FormRequest
{
public function rules()
{
return [
// include rules for other fields
'custom' => new CustomValidation,
];
}
}
使用自定义表单请求中声明的规则在相关控制器中执行验证,通过类型提示控制器方法上的请求
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class CustomActionController extends Controller
{
protected function create(CustomFormRequest $request)
{
}
}
推荐阅读
- ios - 如何快速使用陀螺仪
- three.js - 如何使用 gdal 对 Float32 光栅文件进行显着压缩
- html - 从 Latex 和 Pandoc 创建的 Mathjax 中方程的标签和引用
- mysql - 从 SQL 中的匹配列连接后仅获取一条记录
- excel - 使用Powershell打开受密码保护的Excel xlsx文件并保存为没有密码的csv
- c# - 如何在不更改其内存位置的情况下将类的值复制到其他类
- c++ - 有没有办法使用 gdb 检查分段错误发生在哪里?
- python - 在不识别换行符的情况下打印列表。我不知道如何用语言表达
- node.js - npm install --no-optional 缺少必需的参数
- c# - C++ 中的“笛卡尔积”方法