Laravel如何在表单请求中针对单列验证两个请求输入



我正在使用laravel 9.1。我想验证表的单列中的两个请求输入。以下是我在表单请求中的验证规则。

基本上,name = resource_name . permission_type我想过在验证之前合并这两列,但问题是在连接之前需要首先验证这两个字段。

有人能帮助我如何首先验证resource_namepermission_type,然后在namepermission_types表中检查resource_name.permission_type吗。

谢谢。

$name = $this->request->input('resource_name') . '.' . $this->request->input('permission_type');
$this->request->merge([
'name' => $name,
]);
return [
'type' => ['required'],
'resource_name' => ['required', 'alpha', 'min:3', 'max:50'],
'permission_type' => ['required'],
'name' => ''
];

试试这个

$name = $request->validate([
'type' => ['required'],
'resource_name' => ['required'],
'permission_type' => ['required'],
'name' => [
$request->input('resource_name'). '.' .$request->input('permission_type')
]
]);

好的,这就是我所做的。name字段是数据库中的一个实际字段,但其数据来自两个不同的输入,即resource_namepermission_type。如果请求中不存在该字段,则不会触发和应用规则,因此我在视图中创建了一个具有permission_name的隐藏输入类型。并创建了一个自定义验证器来完成这项工作。

<input type="hidden" name="permission_name" value="" />表单请求:

$rules = [
'resource_type' => ['required'],
'resource_name' => ['required', 'alpha', 'min:3', 'max:50', new IsPlural],
'permission_type_name_single' => ['required'],
'permission_name' => new UniqueTwoInputsInOneColumn('permissions', 'name', $this->request->get('resource_name'), $this->request->get('permission_type_name_single'))
];

自定义规则:

<?php
namespace AppRules;

use IlluminateContractsValidationRule;
use IlluminateSupportFacadesDB;

class UniqueTwoInputsInOneColumn implements Rule
{
protected $tableName;
protected $columnName;
protected $value1;
protected $value2;
protected $ignoreField;
protected $ignoreFieldValue;

/**
* Create a new rule instance.
*
* @return void
*/
public function __construct($tableName, $columnName, $value1, $value2, $ignoreField = null, $ignoreFieldValue = null)
{
$this->tableName = $tableName;
$this->columnName = $columnName;
$this->value1 = $value1;
$this->value2 = $value2;
$this->ignoreField = $ignoreField;
$this->ignoreFieldValue = $ignoreFieldValue;
}

/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
if (!$this->ignoreField)
{
return DB::table($this->tableName)->where($this->columnName, $this->value1 . '.' . $this->value2)->count() == 0;
}
else
{
return DB::table($this->tableName)->where($this->columnName, $this->value1 . '.' . $this->value2)->where($this->ignoreField, '!=', $this->ignoreFieldValue)->count() == 0;
}
}

/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The Permission name ' . $this->value1 . '.' . $this->value2 . ' already exists.';
}
}

添加此代码:

$validatedData = $request->validate([

'resource_name' => ['required', 'alpha','min:3', 'max:255'],

'permission_type' => ['required'],
]);

最新更新