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(...);
....

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

Это действительно все зависит от того, чего вы хотите достичь, но это должно дать вам хорошее понимание того, как работают шаблоны (не только в формах, кстати).