我有一个表单字段来获取移动用户数:
<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中的模型属性,因此在用户模型中我声明了一个访问器和一个mutator来设置和获取手机号码:
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重复条目
答案 0 :(得分:0)
我找到了一种不完美但又很好的方法。 我将此函数添加到我的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);
答案 1 :(得分:0)
我遇到了同样的问题,所以我已经解决了,这是我的代码:
$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']
]);