Я хочу хешировать пароль и ввести его в валидатор запроса, чтобы иметь возможность сохранить регистрацию нового сотрудника. Можете ли вы помочь, как хэшировать пароль в валидаторе запросов?
Вот подробности моего проекта:
Модель:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Hash;
class employes extends Model
{
use HasFactory;
protected $fillable = [
'employee_name',
'login',
'password',
'start_date',
'post',
'team_number',
'isAdmin',
];
public function orders()
{
return $this->hasMany(order::class,foreignKey:'employes_id',localKey:'id');
}
}
Запросить валидатор:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class AddEmployeeRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'employee_name' => ['required','string','min:4'],
'login' => ['required','email','min:4'],
'password' => ['required','string','min:4'],
'start_date' => ['required','date'],
'post' => ['required','string','min:2'],
'team_number' => ['required','integer','max:4'],
'isAdmin' => ['required','boolean'],
];
}
}
Контроллер:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\AddEmployeeRequest;
use App\Models\employes;
use Illuminate\Http\Request;
class EmployeController extends Controller
{
public function store(AddEmployeeRequest $request)
{
$request->validated();
$employee = $request->validated();
employes::create($employee);
return to_route('admin.employes')->with('success', 'The employee is saved successfully');
}
}
Форма просмотра:
@extends('layout')
@section('title','Add new Employee')
@section('content')
<div class = "container">
<form action = "{{ route('admin.store_employee') }}" method = "post" class = "vstack gap-2">
@csrf
<div class = "row">
@include('shared.input',['class'=>'col','type'=>'text','name'=>'employee_name'])
@include('shared.input',['class'=>'col','type'=>'text','name'=>'login'])
@include('shared.input',['class'=>'col','type'=>'password','name'=>'Password'])
@include('shared.input',['class'=>'col','type'=>'date','name'=>'start_date'])
</div>
<div class = "row">
@include('shared.input',['class'=>'col','type'=>'text','name'=>'post'])
@include('shared.input',['class'=>'col','type'=>'integer','name'=>'team_number'])
</div>
<div class = "row">
<label for = "isAdmin">User Status</label>
<select value = "isAdmin" class = "col form-control rounded-0" name = "isAdmin" id = "isAdmin">
<option selected value = "">Choose user type</option>
<option value = "1">Administrator</option>
<option value = "0">User</option>
</select>
@error('isAdmin')
<div class = "text-danger">
{{ $message }}
</div>
@enderror
</div>
<button class = "btn btn-primary">Add</button>
</form>
</div>
@endsection
Вам не нужно хешировать пароль, если вы просто добавите приведение hashed
в столбец password
, как это делает модель User
по умолчанию:
Класс вашей модели также должен быть назван с использованием StudlyCase и единственного числа, поэтому должно быть Employee
, а не «employes». Придерживайтесь соглашений об именах Laravel, и вам не придется писать так много кода.
Если вы имеете в виду хеширование пароля перед сохранением его в базе данных, вот модифицированная версия вашего кода:
use Illuminate\Support\Facades\Hash;
public function store(AddEmployeeRequest $request)
{
$request->validated();
$employee = $request->validated();
// Hash the password using the Hash facade
if (isset($employee['password'])) {
$employee['password'] = Hash::make($employee['password']);
}
employes::create($employee);
return to_route('admin.employes')->with('success', 'The employee is
saved
successfully');
}
Можете ли вы правильно отформатировать код в своем сообщении, пожалуйста? Вам также не нужно выделять весь текст жирным шрифтом.