Cakephp 3.0 изменит или удалит обертку div на форме ввода

Я пытаюсь удалить или изменить оберточный div, который CakePHP использует в его вспомогательном элементе формы.

Когда я использую этот код:

 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 это не работает. Любые подсказки?

Спасибо

Ответ 1

Использовать шаблоны 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
]);

Для полной справки о шаблонах читайте: Настройка шаблонов FormHelper Uses

Стиль CakePHP 2 для настройки обертки больше не поддерживается в версии 3. Из руководства по миграции:

Параметры div, до, после, между и errorMessage были удалено из ввода(). Вы можете использовать шаблоны для обновления упаковки HTML. Параметр шаблонов позволяет переопределить загруженные шаблоны для одного входа.

Ответ 2

Я работаю с приобретенным пользовательским интерфейсом, и у меня было несколько проблем с cakephp3 me, не так просто удалить начальную, большую часть предлагаемого здесь решения после долгих испытаний:

echo $this->Form->input('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-английский)

Ответ 3

Я думаю, что это лучший способ определить шаблоны global в папке 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
);

Надеюсь, это поможет!