*/ class DynamicPageFactory extends Factory { /** * Define the model's default state. * * @return array */ public function definition(): array { $title = fake()->unique()->word(); $slug = Str::slug($title); $configModel = fake()->randomElement(PageConfig::all()); $status = fake()->randomElement(PageStatusEnum::cases()); $pageHome = DynamicPage::query()->where('isRoot', true)->firstOrFail(); return [ 'id_key' => $slug, 'title' => $title, 'slug' => $slug, 'content' => self::getDataFromConfig($configModel), 'page_id' => $pageHome->getKey(), 'config_id' => $configModel->getKey(), 'status' => $status, 'isLocked' => fake()->boolean(25), 'deleted_at' => fake()->boolean(25) ? Carbon::now() : null, ]; } /** * Get values from a specific config. * * @param \App\Models\PageConfig $configModel * @return array * @phpcs:disable Generic.Metrics.CyclomaticComplexity */ private function getDataFromConfig(PageConfig $configModel): array { // phpcs:enable foreach ($configModel->config as $field) { switch ($field['type']) { case DynamicFieldTypes::string->value: $configValue[$field['key']] = fake()->words(5, true); break; case DynamicFieldTypes::textarea->value: $configValue[$field['key']] = fake()->words(10, true); break; case DynamicFieldTypes::wysiwyg->value: $configValue[$field['key']] = sprintf("

%s

", fake()->text(160)); break; case DynamicFieldTypes::number->value: $configValue[$field['key']] = fake()->numberBetween(0, 255); break; case DynamicFieldTypes::boolean->value: $configValue[$field['key']] = fake()->boolean(50); break; case DynamicFieldTypes::url->value: $configValue[$field['key']] = fake()->url(); break; case DynamicFieldTypes::email->value: $configValue[$field['key']] = fake()->email(); break; case DynamicFieldTypes::image->value: // Fake image in seeder. $configValue[$field['key']] = null; break; case DynamicFieldTypes::list->value: $configValue[$field['key']] = [ [ $field['children'][0]['key'] => fake()->unique()->word(), 'order' => 1, ], ]; break; default: $configValue = []; break; } //end switch } //end foreach return $configValue; } }