[英]How to clear jasny input mask before using in Laravel validator?
我有一個表單字段來獲取用戶的手機號碼:
<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重復條目
我找到了一種不完美但很好的方法。 我將此函數添加到我的 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);
我遇到了同樣的問題,所以我已經解決了,這是我的代碼:
$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']
]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.