Cakephp 3 多个自定义模板formhelpers

问题描述 投票:0回答:2

所以我正在工作(为了子孙后代,我可能会添加处理敏感数据),并且权力决定我们需要使用 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->表单->模板($myTemplates);

然后它说你可以使用 input() 方法,但它没有给出示例。 最后但并非最不重要的一点是,自定义模板 FormHelper 应该允许您根据需要“制作”或“创建”任意数量的自定义 formhelpers,但他们没有给出如何做到这一点的示例!卢尔乌特?

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

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

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

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

//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;" 

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

当然,除非它导致整个应用程序的效率问题。有谁知道它应该放在哪个文件中?问候和蒂亚!

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

templates cakephp formhelper cakephp-3.0
2个回答
9
投票

此修复的作用是允许您使用 bootstrap 拥有自定义模板表单(来自 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']); ?>
    

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.