Cakephp 3.0更改或删除输入表单上的包装div

时间:2015-04-16 21:14:42

标签: php html cakephp cakephp-3.0

我正在尝试删除或更改CakePHP在其表单助手上使用的包装div。

当我使用此代码时:

 echo $this->Form->input('contact', ['label' => false]);

输出结果为:

<div class="input text">
  <input type="text" id="contact" maxlength="255" name="contact">
</div>

我想要的是:

<div class="myOwnClass">
  <input type="text" id="contact" maxlength="255" name="contact">
</div>

我曾经在CakePHP 2上为输入法添加了更多选项,但是在最新的CakePHP版本中这没有用。有线索吗?

由于

3 个答案:

答案 0 :(得分:28)

使用FormHelper模板

要更改表单使用中所有输入的换行:

$this->Form->templates([
    'inputContainer' => '<div class="myOwnClass">{{content}}</div>'
]);
// or remove completely
$this->Form->templates([
    'inputContainer' => '{{content}}'
]);
// now get input with desired wrapping
echo $this->Form->input('contact', [
    'label' => false
]);

要更改单一输入的换行,请使用:

echo $this->Form->input('contact', [
    'templates' => [
        'inputContainer' => '<div class="myOwnClass">{{content}}</div>'
    ],
    'label' => false
]);

有关模板的完整参考,请阅读: Customizing the Templates FormHelper Uses

在版本3中不再支持CakePHP 2自定义包装的样式。来自迁移指南:

  

div之前,之后,之间和之间的errorMessage选项   从input()中删除。您可以使用模板更新包装   HTML。 templates选项允许您覆盖已加载的模板   一个输入。

答案 1 :(得分:5)

我正在使用购买的UI,而且cakephp3存在一些问题。对我来说,经过大量测试后,删除<div>首字母并不是那么容易,大多数都是这里提供的解决方案:

echo $this->Form->control('username', [
  'templates'     => ['inputContainer' => '{{content}}'],
  "type"          => "text",
  "aria-invalid"  => "false",
  "aria-required" => "true",
  "class"         => "form-control valid",
  "placeholder"   => "Ingrese su usuario o email ...",
  "autocomplete"  => "on",
  'label'         => false
]);

结果

<input name="username" aria-invalid="false" aria-required="true" class="form-control valid" placeholder="Ingrese su usuario o email ..." autocomplete="on" id="username" type="text">

只添加输入标记(抱歉我的Google-English)

答案 2 :(得分:3)

我认为这是在config文件夹中定义全局模板的更好方法:

<?= $this->Form->create($user, array(
    "class" => "ui form", 
    "templates" => "semantic" // The filename in your config folder without .php
)); ?>

在config文件夹中,使用内容创建文件“semantic.php”(您可以将其命名为任意内容):

return array(
    "inputContainer" => '{{content}}' // Here the magic happens
);

希望这有帮助!