6

所以我正在工作(为了后代的缘故,我可能会添加敏感数据),并且决定我们需要使用 Cakephp 3.0(此时为测试版)的所有强大且记录最少的新工具的权力。

编辑:我的目标是为表单创建几个不同的模板,以通过 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 应该允许您根据需要“制作”或“创建”任意数量的自定义表单助手,但它们没有给出如何做到这一点的示例!?卢武特?

我可以像他们的示例一样轻松使用它一次,但是单个自定义模板的功能在哪里?这对我没有任何好处。

所以通过一个新的可能的解决方案,我尝试得到一个新的错误。

我收到此错误(在我看来)(来自以下代码):

致命错误错误:找不到类“配置”

//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 "Cake\Core\Configure;" 

在我看来,一切都很好,但我想将它添加到层次结构中的适当文件中,这样我就不必将它添加到每个视图中,

当然,除非它会导致整个应用程序整体出现效率问题。有谁知道它应该进入哪个文件?问候和 TIA!

最新更新:我刚刚想通了。很简单!在下面检查我的答案!希望这对某人有所帮助

4

2 回答 2

9

此修复程序的作用是允许您使用引导程序拥有自定义模板表单(来自 cakephp 3 !!!!!!)。如果您想使用表单助手设置大小,并且所有这些都很好(安全性和其他方面)。

Cakephp 的 Jose Zap 告诉我尝试引导插件和小部件等等,但真正的方法应该是:

第 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']); ?>
于 2014-10-01T21:58:33.180 回答
3

假设您需要所有输入以在表单中使用自定义标记以在输入之后显示标签(默认为之前)以及硬编码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(...);
....

您还可以创建自己的助手并在那里定义模板等。

这实际上完全取决于您想要实现的目标,但这应该让您对模板的工作方式有一个很好的理解(顺便说一下,不仅仅是在表单中)。

于 2014-09-27T03:21:20.573 回答