我正在使用 Laravel 5.7,我需要使用 2 个输入(前缀+数字)来验证电话长度。总位数必须始终为 10。
我正在将这个自定义规则用于其他运行良好的项目:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class PhoneLength implements Rule
{
public $prefix;
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct($prefix = null)
{
//
$this->prefix = $prefix;
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
//
return strlen($this->prefix)+strlen($value) == 10 ? true : false;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'El Teléfono debe contener 10 dígitos (prefijo + número)';
}
}
在我的控制器中我做了类似的事情
$validatedData = $request->validate([
'prefix' => 'integer|required',
'number' => ['integer','required', new PhoneLength($request->prefix)],
]);
现在我需要使用数组,所以我的新验证看起来像
$validatedData = $request->validate([
'phones.*.prefix' => 'required',
'phones.*.number' => ['required', new PhoneLength('phones.*.prefix')],
]);
上面的代码根本不起作用,参数没有按预期发送。
如何发送数组值?当然,我需要从同一个数组元素获取值,所以如果phones[0].number
正在验证中,前缀phones[0].prefix
是需要的。
我发现了这个问题,但我拒绝相信这是不可能以“本机”方式做到的:使用自定义规则的 Laravel 数组验证
提前致谢