cakephp 3将默认类添加到输入

时间:2017-09-30 17:02:10

标签: cakephp cakephp-3.0 cakephp-3.x

我正在尝试在我的cakephp 3 app中为每个输入添加一个默认类。 我想要的例子:

输入: <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}}可能包含其他类。你知道怎么做吗?

2 个答案:

答案 0 :(得分:1)

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

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',
            ]
        );
    }
}

答案 1 :(得分:0)

除了Matoran的答案,我还检查了创建表单控件元素时是否提供了另一个“类”,并将其包括在override类中。对我来说,我仍然希望将form-control作为类,但在生成表单时还需要添加类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);
    }
}