castopod/app/Views/Components/Forms/FormComponent.php
2024-05-28 10:14:10 +00:00

64 lines
1.3 KiB
PHP

<?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';
}
}
}