111 lines
3.8 KiB
PHP
111 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace Modules\Taxi\App\Http\Requests;
|
|
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use App\Models\OldMagicModels;
|
|
use Illuminate\Validation\Rule;
|
|
use DateTime;
|
|
|
|
//Не помню точно, но это считается частью логики ларавель - не моя задумка. Некая сущность, которая через себя пропускает данные запроса, валидируя их. Вроде даже вызывается автоматически при работе с формой. Вызывается сразу в начале передачи данных, поэтому гарантирует, что по всему флоу работы с запросом объект с данными уже валиден для нас
|
|
class TaxiOrderRequest extends FormRequest
|
|
{
|
|
/**
|
|
* Действия перед валидацией.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function prepareForValidation()
|
|
{
|
|
//echo '<pre>'; var_dump($this->all()); echo'</pre>';
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the validation rules that apply to the request.
|
|
*/
|
|
public function rules(): array
|
|
{
|
|
//Получаем список активных пользователей
|
|
$empActiveLogins = OldMagicModels\CcEmp::select('emp_login')
|
|
->whereNotIn('emp_state', ['Уволен', 'Декрет'])
|
|
->get()
|
|
->toArray();
|
|
//Правила валидации
|
|
$validationRules = [
|
|
'id' => [
|
|
'int'
|
|
],
|
|
'taxi_date' => [
|
|
'date_format:Y-m-d',
|
|
//Заказ можно создать только на сегодняшний или завтрашний день
|
|
Rule::in([
|
|
(new DateTime())->format('Y-m-d'),
|
|
(new DateTime())->modify('+1 day')->format('Y-m-d')
|
|
]),
|
|
],
|
|
'taxi_time' => [
|
|
'required',
|
|
'string',
|
|
'regex:/^[0-9]{2}:[0-9]{2}$/', //время в формате 00:00
|
|
],
|
|
'cancel_rqst' => 'boolean',
|
|
'emp_phone' => [
|
|
'required',
|
|
'int',
|
|
'regex:/^(7|8)?[0-9]{10}$/'
|
|
],
|
|
'emp_login' => [
|
|
$validationRules['emp_login'] = [
|
|
'required',
|
|
'string',
|
|
'regex:/^[a-z\-]+[0-9]*$/',
|
|
//Логины ищем среди активных логинов на текущий момент
|
|
Rule::in(
|
|
array_map(fn($el) => $el['emp_login'], $empActiveLogins)
|
|
)
|
|
],
|
|
],
|
|
'taxi_address_from' => [
|
|
'required',
|
|
'string',
|
|
'max: 500'
|
|
],
|
|
'taxi_address_to' => [
|
|
'required',
|
|
'string',
|
|
'max: 500'
|
|
]
|
|
];
|
|
|
|
//Во время создания запроса поле ID не валидируется
|
|
if ($this->isMethod('POST')){
|
|
$validationRules['id'] = [
|
|
'prohibited'
|
|
];
|
|
}
|
|
|
|
return $validationRules;
|
|
}
|
|
|
|
/**
|
|
* Determine if the user is authorized to make this request.
|
|
*/
|
|
public function authorize(): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Переопределение сообщений об ошибках валидации
|
|
*
|
|
* @return array
|
|
*/
|
|
public function messages(): array
|
|
{
|
|
return [
|
|
'taxi_date.in' => 'Заявку на такси можно завести только на сегодняшний или завтрашний день'
|
|
];
|
|
}
|
|
}
|