【问题标题】:How to clear jasny input mask before using in Laravel validator?如何在 Laravel 验证器中使用之前清除 jasny 输入掩码?
【发布时间】:2015-09-22 02:48:00
【问题描述】:

我有一个表单字段来获取用户的手机号码:

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

我使用jasny input mask引导用户输入数据,但我需要将手机号码以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 重复条目

【问题讨论】:

  • 我认为您正在尝试保存数据库中已经存在的手机号码?
  • 是的,我想阻止用户这样做,所以我应该在保存到数据库之前验证手机号码,如果手机号码已经存在,则显示盈利信息!

标签: javascript laravel-5 jasny-bootstrap


【解决方案1】:

我找到了一种不完美但很好的方法。 我将此函数添加到我的 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);

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,所以我已经解决了,这是我的代码:

    $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']
        ]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      相关资源
      最近更新 更多