所以我正在工作(为了子孙后代,我可能会添加处理敏感数据),并且权力决定我们需要使用 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;"
在我看来,一切都很好,但我想将其添加到层次结构中的适当文件中,这样我就不必将其添加到每个视图中,
当然,除非它导致整个应用程序的效率问题。有谁知道它应该放在哪个文件中?问候和蒂亚!
最新更新:我刚刚弄清楚了。很简单!检查下面我的答案!希望这对某人有帮助
此修复的作用是允许您使用 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']); ?>
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(...);
....
您还可以创建自己的助手并在那里定义模板等。
这实际上完全取决于您想要实现的目标,但这应该让您很好地理解模板的工作原理(顺便说一下,不仅仅是在表单中)。