id = $model->id; $instance->name = $model->name; $instance->description_html = $model->descriptionHtml(); if ($model->cover) { $instance->cover = $files->referenceForImage($model->cover); } $instance->tags = ZipExportTag::fromModelArray($model->tags()->get()->all()); $chapters = []; $pages = []; $children = $model->getDirectVisibleChildren()->all(); foreach ($children as $child) { if ($child instanceof Chapter) { $chapters[] = $child; } else if ($child instanceof Page) { $pages[] = $child; } } $instance->pages = ZipExportPage::fromModelArray($pages, $files); $instance->chapters = ZipExportChapter::fromModelArray($chapters, $files); return $instance; } public static function validate(ZipValidationHelper $context, array $data): array { $rules = [ 'id' => ['nullable', 'int'], 'name' => ['required', 'string', 'min:1'], 'description_html' => ['nullable', 'string'], 'cover' => ['nullable', 'string', $context->fileReferenceRule()], 'tags' => ['array'], 'pages' => ['array'], 'chapters' => ['array'], ]; $errors = $context->validateData($data, $rules); $errors['tags'] = $context->validateRelations($data['tags'] ?? [], ZipExportTag::class); $errors['pages'] = $context->validateRelations($data['pages'] ?? [], ZipExportPage::class); $errors['chapters'] = $context->validateRelations($data['chapters'] ?? [], ZipExportChapter::class); return $errors; } }