تغییر لاگین با ایمیل به موبایل در لاراول
امروز میخواستم چندتا فیلد به فرم ثبت نام اضافه کنم و با افزودن فیلد جدید همچنین به جای ورود با ایمیل ، ورود ( یا همون لاگین ) با موبایل انجام بدم .همچنین گفتم شاید این مشکل بقیه هم باشه و بخوان حلش کنن در نتیجه تصمیم گرفتم نتیجه رو تو این بلاگ به اشتراک بزارم .
خلاصه با یکم تحقیق متوجه شدم خیلی ساده است فقط باید به آدرس زیر داخل فایلها بریم :
vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php
البته تو وب یک آدرس دیگه گذاشته بود که از پوشه src شروع میشد منم فقط اسم فایل که AuthenticatesUsers.php هست سرچ زدم و دیدم درسته و تو آدرس بالا بود. حالا فقط کافیه به خط 146 بریم و گزینه email رو به هر فیلدی تو دیتابیس داریم (البته فقط تو جدول users ) تغییر بدیم ، و در نهایت خواهیم داشت :
public function username()
{
return ‘mobile’;
}
حالا مشکل اینه هنوز به لاراول فیلد موبایل اضافه نکردم .
افزودن فیلد جدید و اضافی به فرم ثبت نام :
1- اول از همه باید فرم ثبت نام که به طور پیش فرض تو آدرس زیر هست باز کنیم و داخل فرم فیلدهای مد نظر رو جایگذاری کنیم :
resources\views\auth\register.blade.php
+البته اینم بدونین که این فرم رو هر جا کپی کنید مثلا تو صفحه اصلی یا هر تمپلیتی که بسازین در نتیجه تاثیری نداره و همه جا میشه استفاده کرد (البته میدونم که خودتون استادین)
مثلا برای موبایل من کد زیر را اضافه کردم :
<div class=”form-group row”>
<label for=”mobile” class=”col-md-4 col-form-label text-md-right”>شماره همراه</label><div class=”col-md-6″>
<input id=”mobile” type=”text” class=”form-control{{ $errors->has(‘mobile’) ? ‘ is-invalid’ : ” }}” name=”mobile” value=”{{ old(‘mobile’) }}” required autocomplete=”mobile” autofocus>@if ($errors->has(‘mobile’))
<span class=”invalid-feedback” role=”alert”>
<strong>{{ $errors->first(‘mobile’) }}</strong>
</span>
@endif
</div>
</div>
2- قدم دوم اینه که تو کنترلر registerController دو تا تابع تغییر بدین در اصل باید دوتا قسمت اضافه کنید :
اول اضافه کردن فیلد موبایل به validator
که بتونه آرگومان رو دریافت کنه :
protected function validator(array $data)
{
return Validator::make($data, [
‘name’ => [‘required’, ‘string’, ‘max:255′],
’email’ => [‘required’, ‘string’, ’email’, ‘max:255’, ‘unique:users’],
‘mobile’ => [‘required’, ‘string’, ‘digits:11’, ‘unique:users’],
‘password’ => [‘required’, ‘string’, ‘min:8’, ‘confirmed’]
]);
}
+فقط یک نکته خیلی مهم دیگه اینکه حتما باید این فیلد موبایل چون قراره برای لاگین هم استفاده بشه ، یونیک باشه حتما براش از ‘unique:users’ استفاده کنید.
بخش دوم هم که تابع create هست به این صورت تغییر میکنه :
protected function create(array $data)
{
return User::create([
‘name’ => $data[‘name’],
’email’ => $data[’email’],
‘mobile’ => $data[‘mobile’],
‘password’ => Hash::make($data[‘password’])
]);
}
3- قدم سوم هم افزودن فیلد جدید موبایل به مدل یوزر هست . که من به این صورت گذاشتم :
protected $fillable = [
‘name’, ’email’, ‘mobile’, ‘password’
];
4- قدم آخر که در اصل باید اول میرفتیم ولی درنتیجه آخر تاثیری نداره اضافه کردن این فیلد موبایل به migration هست.(اینو که میدونم بلدین اگر نبودین بگین که براتون توضیحشو بزارم).
موفق و سربلند باشید (شرکت طراحی سایت آواتم)