'nullable|string|max:255', 'linkable_type' => 'nullable|string|max:100', 'linkable_id' => 'nullable|integer', // 결재선 (보류 상태이지만 구조는 유지) 'approvers' => 'nullable|array', 'approvers.*.user_id' => 'required_with:approvers|integer|exists:users,id', 'approvers.*.role' => 'nullable|string|max:50', // 문서 데이터 (EAV) 'data' => 'nullable|array', 'data.*.section_id' => 'nullable|integer', 'data.*.column_id' => 'nullable|integer', 'data.*.row_index' => 'nullable|integer|min:0', 'data.*.field_key' => 'required_with:data|string|max:100', 'data.*.field_value' => 'nullable|string', // 첨부파일 'attachments' => 'nullable|array', 'attachments.*.file_id' => 'required_with:attachments|integer|exists:files,id', 'attachments.*.attachment_type' => "nullable|string|in:{$attachmentTypes}", 'attachments.*.description' => 'nullable|string|max:255', ]; } public function messages(): array { return [ 'title.max' => __('validation.max.string', ['attribute' => '제목', 'max' => 255]), 'approvers.*.user_id.exists' => __('validation.exists', ['attribute' => '결재자']), 'data.*.field_key.required_with' => __('validation.required', ['attribute' => '필드 키']), 'attachments.*.file_id.exists' => __('validation.exists', ['attribute' => '파일']), ]; } }