Skip to content
Snippets Groups Projects
Field.php 1.67 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    
    declare(strict_types=1);
    
    namespace App\Views\Components\Forms;
    
    class Field extends FormComponent
    {
        protected string $as = 'Input';
    
        protected string $label = '';
    
    
        protected ?string $helper = null;
    
            $helperText = '';
            if ($this->helper !== null) {
                $helperId = $this->id . 'Help';
                $helperText = '<Forms.Helper id="' . $helperId . '">' . $this->helper . '</Forms.Helper>';
                $this->attributes['aria-describedby'] = $helperId;
            }
    
    
            $labelAttributes = [
                'for' => $this->id,
                'isOptional' => $this->required ? 'false' : 'true',
            ];
    
            if ($this->hint) {
                $labelAttributes['hint'] = $this->hint;
    
            }
            $labelAttributes = stringify_attributes($labelAttributes);
    
            // remove field specific attributes to inject the rest to Form Component
            $fieldComponentAttributes = $this->attributes;
            unset($fieldComponentAttributes['as']);
            unset($fieldComponentAttributes['label']);
            unset($fieldComponentAttributes['class']);
            unset($fieldComponentAttributes['helperText']);
            unset($fieldComponentAttributes['hintText']);
    
    
            $fieldComponentAttributes['class'] = 'mb-1';
    
            $element = __NAMESPACE__ . '\\' . $this->as;
            $fieldElement = new $element($fieldComponentAttributes);
    
    
            return <<<HTML
                <div class="flex flex-col {$this->class}">
                    <Forms.Label {$labelAttributes}>{$this->label}</Forms.Label>