cakephp 3 添加默认 class 到输入

cakephp 3 add default class to inputs

我正在尝试为我的 cakephp 3 应用程序中的每个输入添加默认值 class。 我想要的示例:

输入: <echo $this->Form->control('email');

输出: <input class="form-control" class="is-invalid"/>

期望的输出: <input class="form-control is-invalid"/>

为此我编辑了 FormHelper 的输入模板

$this->viewBuilder()->setHelpers([
        'Form' => [
            'templates' => [
                'input' => '<input class="form-control" type="{{type}}" name="{{name}}"{{attrs}}/>'
            ]
        ]
    ]);

问题是 {{attrs}} 可能包含其他 classes。你知道怎么做吗?

解决了:D 创建一个 FormHelper 来覆盖方法控件并添加 class。

class BootstrapFormHelper extends FormHelper{
    public function control($fieldName, array $options = []){
        if($this->request->is('post') && !$this->isFieldError($fieldName)){
            $options['class'] = 'form-control is-valid';
        }else{
            $options['class'] = 'form-control';
        }
        return parent::control($fieldName, $options);
    }
}

然后更改您的 AppView

class AppView extends View{
    public function initialize()
    {
        $this->loadHelper(
            'Form', [
                'className' => 'BootstrapForm',
            ]
        );
    }
}

除了 Matoran 的回答之外,我还检查了在创建表单控件元素时是否提供了另一个 'class',并将其包含在覆盖 class 中。对我来说,我仍然希望 form-control 作为 class,但在生成表单时还需要添加 class datepickerdatetimepicker

class BootstrapFormHelper extends FormHelper{
    public function control($fieldName, array $options = []){
        if($this->request->is('post') && !$this->isFieldError($fieldName)){
            $options['class'] = (isset($options['class'])) ? 'form-control is-valid '.$options['class'] : 'form-control is-valid';
        }else{
            $options['class'] = (isset($options['class'])) ? 'form-control '.$options['class'] : 'form-control';
        }
        return parent::control($fieldName, $options);
    }
}