<?php declare(strict_types=1); namespace App\Views\Components\Forms; use ViewComponents\Component; abstract class FormComponent extends Component { protected array $props = [ 'id', 'name', 'value', 'isRequired', 'isReadonly', ]; protected array $casts = [ 'isRequired' => 'boolean', 'isReadonly' => 'boolean', ]; protected string $id; protected string $name; /** * @var null|string|list<string> */ protected null|string|array $value = null; protected bool $isRequired = false; protected bool $isReadonly = false; /** * @param array<string, string> $attributes */ public function __construct(array $attributes) { $parentVars = get_class_vars(self::class); $this->casts = [...$parentVars['casts'], ...$this->casts]; $this->props = [...$parentVars['props'], $this->props]; parent::__construct($attributes); if (! isset($this->id)) { $this->id = $this->name; } $this->attributes['id'] = $this->id; $this->attributes['name'] = $this->name; if ($this->isRequired) { $this->attributes['required'] = 'required'; } if ($this->isReadonly) { $this->attributes['readonly'] = 'readonly'; } } }