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 datepicker
或 datetimepicker
。
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);
}
}
我正在尝试为我的 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 datepicker
或 datetimepicker
。
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);
}
}