Проблема форматирования флажка CakePHP 3.x

Некоторым из вас это может показаться очевидным, но я действительно изо всех сил пытаюсь найти прямой ответ. Обычно я гуглил, а также читал руководство CakePHP и API, чтобы найти ответ на следующий вопрос:

При создании ввода следующий код создает следующие выходные данные:

// in the view
echo $this->Form->input('notes');

// resultant html
<div class="input textarea">
    <label for="notes">Notes</label>
    <textarea id="notes" rows="5" name="notes"></textarea>
</div>

Примечание: это одинаково для большинства типов ввода; и поскольку он последователен, он отлично подходит для форматирования.

Однако с флажком:

//In the view
echo $this->Form->input('ticket_required', 
    ['type' => 'checkbox']
);

// resultant HTML
<div class="input checkbox">
    <input type="hidden" value="0" name="ticket_required">
    <label for="ticket-required">
    <input id="ticket-required" type="checkbox" value="1" name="ticket_required">
    Ticket Required</label>
</div>

[Примечание: я понимаю необходимость/желание скрытого поля]

Теперь... конечно не может ли быть необычным требование просто использовать тот же подход к формату, что и любой другой стандартный ввод?

Мой вопрос - как заставить CakePHP создать элемент флажка следующим образом:

// desired HTML
<div class="input checkbox">
    <input type="hidden" value="0" name="ticket_required">
    <label for="ticket-required">
    Ticket Required</label>
    <input id="ticket-required" type="checkbox" value="1" name="ticket_required">
</div>

Чтобы было ясно: порядок видимых элементов такой же, как и у других сгенерированных элементов (метка перед вводом, и все они заключены в обертку div).

Обратите внимание... я пробовал вариант 'nestedInput' => false. Это фактически полностью избавляет от ввода флажка из div.

Я не могу понять, почему это не делается таким образом... но даже если бы это было так, я не могу понять, почему это не является очевидным вопросом для документации.

Ну ладно .. надеюсь, кто-то может мне помочь здесь.

Заранее спасибо.

Рик


person elb98rm    schedule 03.12.2015    source источник
comment
Я думаю, это то, что вы ищете: stackoverflow.com/a/5394069/3144159   -  person Inigo Flores    schedule 03.12.2015
comment
Это не работает на CakePHP 3.x   -  person elb98rm    schedule 03.12.2015


Ответы (1)


Я бы подумал, что nestedInput будет работать, но даже если бы это было так, вы не хотите добавлять его к каждому входу, который вы создаете на веб-сайте.

CakePHP 3 использует строковые шаблоны для создания элементов управления формой. Вы можете изменить их в соответствии с вашими потребности.

По умолчанию флажок использует шаблон nestingLabel, поэтому, если вы хотите предотвратить вложение всех входных данных, вы можете изменить шаблон.

// src/View/AppView.php

$this->loadView('Form', [
    templates => [
        'nestingLabel' => '<label{{attrs}}>{{text}}</label>{{hidden}}{{input}}'
    ],
    // [More helper default config overrides][2]..
])

Для большего контроля над своими помощниками вы можете создать свои собственные который расширяет один из основных помощников.

person Hippie    schedule 03.12.2015