CakePHP 3 несколько пользовательских шаблонов formhelpers
Итак, я на работе (работая с конфиденциальными данными, я мог бы добавить ради потомства), и власти, которые решают, что нам нужно использовать все мощный и наименее документированный новый инструмент Cakephp 3.0 (бета в это время).
Edit: моя цель-создать несколько различных шаблонов для форм для вызова через шаблон formhelper или методы ввода. На самом деле для этого нет хорошего примера. Настройка шаблонов, используемых FormHelper: Как видно из книги(и нигде больше на интернет в любом месте) очень короткая документация, таким образом: http://book.cakephp.org/3.0/en/core-libraries/helpers/form.html#customizing-the-templates-formhelper-uses
сайт говорит, что вы можете использовать метод шаблона, а затем дать неопределенное "использование":
$myTemplates = [
'inputContainer' => '<div class="form-control">{{content}}</div>',
];
$this - >Form - >templates ($myTemplates);
тогда он говорит, что вы можете использовать метод input (), для которого он не дает примера. И последнее, но не менее важное: пользовательский шаблон FormHelper должен позвольте вам "сделать" или "создать" столько из этих пользовательских formhelpers, сколько вы хотите, но они не дают примера использования того, как это сделать!? лулвут?
Я могу легко использовать его как пример, но где власть в один шаблон? Это не делает меня anygood.
таким образом, новым возможным решением я пытаюсь получить новую ошибку.
Я получаю эту ошибку (на мой взгляд)(из следующего кода):
Фатальная Ошибка Ошибка: класс "Configure" не найдено
//within bootstrap.php
Configure::write('templates', [
'shortForm' => [
'formstart' => '<form class="" {{attrs}}>',
'label' => '<label class="col-md-2 control-label" {{attrs}}>{{text}}</label>',
'input' => '<div class="col-md-4"><input type="{{type}}" name="{{name}}" {{attrs}} /></div>',
'select' => '<div class="col-md-4"><select name="{{name}}"{{attrs}}>{{content}}</select> </div>',
'inputContainer' => '<div class="form-group {{required}}" form-type="{{type}}">{{content}} </div>',
'checkContainer' => '',],
'longForm' => [
'formstart' => '<form class="" {{attrs}}>',
'label' => '<label class="col-md-2 control-label" {{attrs}}>{{text}}</label>',
'input' => '<div class="col-md-6"><input type="{{type}}" name="{{name}}" {{attrs}} /></div>',
'select' => '<div class="col-md-6"><select name="{{name}}"{{attrs}}>{{content}}</select> </div>',
'inputContainer' => '<div class="form-group {{required}}" form-type="{{type}}">{{content}} </div>',
'checkContainer' => '',],
'fullForm' => [
'formstart' => '<form class="" {{attrs}}>',
'label' => '<label class="col-md-2 control-label" {{attrs}}>{{text}}</label>',
'input' => '<div class="col-md-10"><input type="{{type}}" name="{{name}}" {{attrs}} /> </div>',
'select' => '<div class="col-md-10"><select name="{{name}}"{{attrs}}>{{content}}</select> </div>',
'inputContainer' => '<div class="form-group {{required}}" form-type="{{type}}">{{content}} </div>',
'checkContainer' => '',]
]);
//within my view
<?php
$this->Form->templates(Configure::read('templates.shortForm'));
?>
Старые Обновления: я добавил
use "CakeCoreConfigure;"
на мой взгляд, и все работает отлично, но я хотел бы добавить это в соответствующий файл в иерархии, чтобы мне не нужно было добавлять это в каждый вид,
то есть, если, конечно, это не вызывает проблемы эффективности для всего приложения в целом. Кто-нибудь знает, в какой файл его поместить? С уважением и TIA!
Обновление: я только что понял. Так просто! проверьте мой ответ ниже! Надеюсь, это помогло кому-то
2 ответов
это исправление позволяет вам иметь пользовательские формы шаблонов (от cakephp 3!!!!) использование bootstrap. Если вы хотите установить размеры с помощью вспомогательной формы, и все это добро (и что нет).
Хосе Зап из Cakephp сказал мне попробовать Bootstrap плагины и виджеты, а что нет, но реальный способ сделать это должен был быть таким:
Шаг 1: Создайте config / templatesConfig.php и добавьте свои пользовательские формы.
<?php
$config = [
'Templates'=>[
'shortForm' => [
'formStart' => '<form class="" {{attrs}}>',
'label' => '<label class="col-md-2 control-label" {{attrs}}>{{text}}</label>',
'input' => '<div class="col-md-4"><input type="{{type}}" name="{{name}}" {{attrs}} /></div>',
'select' => '<div class="col-md-4"><select name="{{name}}"{{attrs}}>{{content}}</select></div>',
'inputContainer' => '<div class="form-group {{required}}" form-type="{{type}}">{{content}}</div>',
'checkContainer' => '',],
'longForm' => [
'formStart' => '<form class="" {{attrs}}>',
'label' => '<label class="col-md-2 control-label" {{attrs}}>{{text}}</label>',
'input' => '<div class="col-md-6"><input type="{{type}}" name="{{name}}" {{attrs}} /></div>',
'select' => '<div class="col-md-6"><select name="{{name}}"{{attrs}}>{{content}}</select></div>',
'inputContainer' => '<div class="form-group {{required}}" form-type="{{type}}">{{content}}</div>',
'checkContainer' => '',],
'fullForm' => [
'formStart' => '<form class="" {{attrs}}>',
'label' => '<label class="col-md-2 control-label" {{attrs}}>{{text}}</label>',
'input' => '<div class="col-md-10"><input type="{{type}}" name="{{name}}" {{attrs}} /></div>',
'select' => '<div class="col-md-10"><select name="{{name}}"{{attrs}}>{{content}}</select></div>',
'inputContainer' => '<div class="form-group {{required}}" form-type="{{type}}">{{content}}</div>',
'checkContainer' => '',]
]
];
Шаг 2: из контроллер внутри метода для правильного представления вызывает эту строку.
Не забудьте добавить это в верхней части контроллера
use Cake\Core\Configure;
$this->set('form_templates', Configure::read('Templates'));
Шаг 3: Добавьте это в bootstrap.файл php
// Load an environment local configuration file.
// You can use this file to provide local overrides to your
// shared configuration.
Configure::load('templatesConfig','default'); //fixed
Шаг 4 (наконец): добавьте эту строку с именем шаблона, который вы хотите Bam!.
<?php $this->Form->templates($form_templates['shortForm']); ?>
Допустим, вам нужны все исходные данные, чтобы использовать пользовательскую разметку в форме, чтобы показать метку после ввода (по умолчанию-до) и другой класс для жестко error-message
ошибки:
$this->Form->create($entity, ['templates' => [
'formGroup' => '{{input}}{{label}}',
'error' => '<div class="error">{{content}}</div>'
]]);
если вы хотите настроить только один вход, передайте тот же ключ "шаблоны" в FormHelper::input()
параметры вот так:
$this->Form->input('fieldname', ['templates' => [
'formGroup' => '{{input}}{{label}}',
'error' => '<div class="error">{{content}}</div>'
]]);
Если вам нужно определить несколько шаблонов и повторно использовать их, когда захотите, вот что вы можете попробовать (имейте в виду, что я пишу его здесь, никогда не использовал раньше):
// in bootstrap (as this is a config i believe
Configure::write('templates', [
'foo' => [....],
'bar' => [....]
]);
// in any view
$this->Form->templates(Configure::read('templates.foo'));
$this->Form->create(...);
....
вы также можете создать свой собственный помощник и определить есть шаблоны, и т. д.
Это действительно все зависит от того, чего вы хотите достичь, но это должно дать вам хорошее понимание того, как работают шаблоны (не только в формах, кстати).