File manager - Edit - /var/www/html/portal/app/Http/Requests/Accounts/LinhasDoTempo/LinhasDoTempoRequest.php
Back
<?php namespace App\Http\Requests\Accounts\LinhasDoTempo; use App\Enums\Accounts\LinhasDoTempoDraftFormType; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Http\UploadedFile; use Illuminate\Validation\Rule; use Illuminate\Validation\Rules\File; /** * Validação centralizada do módulo Linhas do Tempo (múltiplos contextos por rota). */ class LinhasDoTempoRequest extends FormRequest { /** * Determina se o usuário está autorizado a enviar a requisição (camada fina; autorização detalhada no controller). */ public function authorize(): bool { return auth()->check(); } /** * Remove slots vazios de upload (evita falha em attachments.* quando o browser envia entrada sem arquivo). */ protected function prepareForValidation(): void { $name = (string) $this->route()?->getName(); if (! in_array($name, [ 'admin.contaAngra.linhasDoTempo.store', 'admin.contaAngra.linhasDoTempo.update', 'admin.contaAngra.linhasDoTempo.pontos.store', 'admin.contaAngra.linhasDoTempo.pontos.update', 'admin.contaAngra.linhasDoTempo.attachments.timeline', 'admin.contaAngra.linhasDoTempo.pontos.attachments', ], true)) { return; } $raw = $this->file('attachments'); if ($raw === null) { $this->merge(['attachments' => []]); return; } $files = is_array($raw) ? $raw : [$raw]; $files = array_values(array_filter($files, static function ($f): bool { return $f instanceof UploadedFile && $f->isValid(); })); $this->merge(['attachments' => $files]); } /** * @return array<string, mixed> */ public function rules(): array { $name = (string) $this->route()->getName(); return match ($name) { 'admin.contaAngra.linhasDoTempo.store' => self::rulesStoreTimeline(), 'admin.contaAngra.linhasDoTempo.update' => self::rulesUpdateTimeline(), 'admin.contaAngra.linhasDoTempo.pontos.store', 'admin.contaAngra.linhasDoTempo.pontos.update' => self::rulesHistoricalPoint(), 'admin.contaAngra.linhasDoTempo.notas.store', 'admin.contaAngra.linhasDoTempo.notas.update' => self::rulesNote(), 'admin.contaAngra.linhasDoTempo.draft.createTimeline', 'admin.contaAngra.linhasDoTempo.draft.upsert', 'admin.contaAngra.linhasDoTempo.pontos.draft.upsert', 'admin.contaAngra.linhasDoTempo.pontos.draft.create' => self::rulesDraft(), 'admin.contaAngra.linhasDoTempo.attachments.timeline', 'admin.contaAngra.linhasDoTempo.pontos.attachments' => self::rulesAttachment(), default => [], }; } /** * @return array<string, mixed> */ public static function rulesStoreTimeline(): array { return [ 'name' => ['required', 'string', 'max:150'], 'event_date' => ['required', 'date'], 'process_text' => ['required', 'string', 'max:500000'], 'description' => ['nullable', 'string', 'max:300'], 'tags_input' => ['nullable', 'string', 'max:2000'], 'attachments' => ['nullable', 'array'], 'attachments.*' => self::optionalAttachmentFileRules(), ]; } /** * @return array<string, mixed> */ public static function rulesUpdateTimeline(): array { return [ 'name' => ['required', 'string', 'max:150'], 'event_date' => ['required', 'date'], 'process_text' => ['required', 'string', 'max:500000'], 'description' => ['nullable', 'string', 'max:300'], 'tags_input' => ['nullable', 'string', 'max:2000'], 'attachments' => ['nullable', 'array'], 'attachments.*' => self::optionalAttachmentFileRules(), 'remove_attachment_ids' => ['nullable', 'array'], 'remove_attachment_ids.*' => ['uuid'], ]; } /** * @return array<string, mixed> */ public static function rulesHistoricalPoint(): array { return [ 'name' => ['required', 'string', 'max:150'], 'event_date' => ['required', 'date'], 'process_text' => ['required', 'string', 'max:500000'], 'attachments' => ['nullable', 'array'], 'attachments.*' => self::optionalAttachmentFileRules(), 'remove_attachment_ids' => ['nullable', 'array'], 'remove_attachment_ids.*' => ['uuid'], ]; } /** * @return array<string, mixed> */ public static function rulesNote(): array { return [ 'content' => ['required', 'string', 'max:10000'], ]; } /** * @return array<string, mixed> */ public static function rulesDraft(): array { return [ 'form_type' => ['required', 'string', Rule::in(array_column(LinhasDoTempoDraftFormType::cases(), 'value'))], 'form_data' => ['required', 'array'], ]; } /** * @return array<string, mixed> */ public static function rulesAttachment(): array { return [ 'attachments' => ['required', 'array', 'min:1'], 'attachments.*' => self::requiredAttachmentFileRules(), ]; } /** * Anexos opcionais (cada índice existente deve ser arquivo válido; sem "required" no wildcard). * * @return list<mixed> */ public static function optionalAttachmentFileRules(): array { return [ 'file', 'max:' . self::maxUploadKb(), File::types(self::allowedExtensions()), ]; } /** * Anexos obrigatórios (upload dedicado de arquivos). * * @return list<mixed> */ public static function requiredAttachmentFileRules(): array { return [ 'required', 'file', 'max:' . self::maxUploadKb(), File::types(self::allowedExtensions()), ]; } /** * Tamanho máximo por arquivo em kilobytes (Laravel rule "max" em KB). */ public static function maxUploadKb(): int { $mb = (int) config('linhas_do_tempo.max_upload_mb', (int) env('LINHAS_DO_TEMPO_MAX_UPLOAD_MB', 50)); return max(1, $mb * 1024); } /** * Extensões permitidas (RN-06). * * @return list<string> */ public static function allowedExtensions(): array { return [ 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'webp', 'xlsx', 'xls', 'ods', 'csv', 'docx', 'doc', ]; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings