Я работаю с 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 с пользовательским правилом
Заранее спасибо