88 lines
2.5 KiB
PHP
88 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Components\Admin\Http\Requests;
|
|
|
|
use App\Traits\WebPageAuthorization;
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class UserRequest extends FormRequest
|
|
{
|
|
use WebPageAuthorization;
|
|
|
|
protected string $resourceType = 'web_pages';
|
|
protected string $resourceValue = 'admin.users.php';
|
|
|
|
public function authorize(): bool
|
|
{
|
|
$modelId = $this->route('user')?->id;
|
|
$action = $modelId ? 'edit' : 'create';
|
|
|
|
return $this->checkResourcePermission($this->resourceType, $this->resourceValue, $action);
|
|
}
|
|
|
|
public function rules(): array
|
|
{
|
|
$rules = [
|
|
'name' => ['required', 'string', 'max:255'],
|
|
'email' => [
|
|
'required',
|
|
'string',
|
|
'email',
|
|
'max:255',
|
|
Rule::unique('users', 'email')
|
|
],
|
|
'active' => ['boolean'],
|
|
];
|
|
|
|
// Add password rules for create
|
|
if ($this->isMethod('POST')) {
|
|
$rules['password'] = ['required', 'string', 'min:8', 'confirmed'];
|
|
}
|
|
|
|
// Modify password rules for update
|
|
if ($this->isMethod('PUT') || $this->isMethod('PATCH')) {
|
|
$rules['password'] = ['nullable', 'string', 'min:8', 'confirmed'];
|
|
$rules['email'][4] = Rule::unique('users', 'email')->ignore($this->route('user')->id);
|
|
}
|
|
|
|
return $rules;
|
|
}
|
|
|
|
public function messages(): array
|
|
{
|
|
return [
|
|
'name.required' => 'A name is required',
|
|
'name.max' => 'The name cannot be longer than 255 characters',
|
|
'email.required' => 'An email address is required',
|
|
'email.email' => 'Please enter a valid email address',
|
|
'email.unique' => 'This email address is already in use',
|
|
'password.required' => 'A password is required',
|
|
'password.min' => 'The password must be at least 8 characters',
|
|
'password.confirmed' => 'The password confirmation does not match',
|
|
];
|
|
}
|
|
|
|
protected function prepareForValidation(): void
|
|
{
|
|
$this->merge([
|
|
'active' => $this->has('active')
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Get the error messages that apply to the request parameters.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function attributes(): array
|
|
{
|
|
return [
|
|
'name' => 'user name',
|
|
'email' => 'email address',
|
|
'password' => 'password',
|
|
'active' => 'active status',
|
|
];
|
|
}
|
|
}
|