Как очистить маску ввода jasny перед использованием в валидаторе Laravel?

У меня есть поле формы для получения мобильного количества пользователей:

<input class="form-control" name="mobile" data-mask="0999 999 9999" type="text" id="mobile" />

Я использовал маску ввода jasny, чтобы помочь пользователям вводить данные, но мне нужно сохранить номер мобильного телефона в формате 999999999 в базу данных (без 0 и пробелов).

Поскольку я использую ajax для отправки данных на сервер с помощью функции serialize(), я не хочу использовать скрипт на стороне клиента для изменения введенного значения (у меня много таких полей формы), кроме как путем изменения или добавления функции или метода к маске ввода jasny использовать на всех таких полях!

Я получаю введенное значение на стороне сервера и хочу присвоить его атрибуту модели в Laravel 5, поэтому в пользовательской модели я объявил аксессор и мутатор для установки и получения номера мобильного телефона:

public function setMobileAttribute($value){
    $value = substr(str_replace(" ","",$value),1);
    $this->attributes['mobile'] = $value;
}

а также

public function getMobileAttribute($value){
    return '0'.substr($value,0,3).' '.substr($value,3,3).' '.substr($value,6,4);
}

Это работает хорошо, но когда я хочу использовать проверку Laravel, чтобы указать, что это уникальное поле, это не работает. Мир кода похож на:

class UserController extends Controller {

    protected $rules = ['mobile' => 'required|unique:users'];
    public function store(Request $request){
        $validator = Validator::make($request->all(), $this->rules);
        if ($validator->fails()){
            return response()->json([
                'success' => false,
                'errors' => $validator->getMessageBag()->toArray()
            ]);
        }
        // codes to store user...
    }
}

Это вызывает ошибку: SQLSTATE[23000]: нарушение ограничения целостности: 1062 Дублирующаяся запись


person Saeid    schedule 04.07.2015    source источник
comment
Я думаю, вы пытаетесь сохранить номер мобильного телефона, который уже существует в БД?   -  person Matthew King    schedule 05.07.2015
comment
да, я хочу, чтобы пользователи не делали этого, поэтому я должен проверять мобильные номера перед сохранением в БД и показывать сообщение о прибыли, если мобильный номер уже существует!   -  person Saeid    schedule 06.07.2015


Ответы (2)


Я нашел способ не идеальный, но хороший. Я добавляю эту функцию в свой класс UserController:

private function sanitize(Request $request){
    $input = $request->all();
    $input['mobile'] = substr(str_replace(" ","",$input['mobile']),1);
    $request->replace($input);
    return $request->all();
}

и используйте валидатор Laravel следующим образом:

$validator = Validator::make($this->sanitize($request), $this->rules);
person Saeid    schedule 06.07.2015

Я столкнулся с той же проблемой, поэтому я решил ее, вот мой код:

$mobile = str_replace(['(', ')', ' ', '-'], ['', '', '', ''], $request->post('mobile'));
$request->merge(array('mobile' => $mobile));

    $request->validate([
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'max:50', 'min:8'],
        'phone' => ['required', 'unique:users']
    ]);
person Rajinder    schedule 19.11.2020