2014-09-26 61 views
6

所以我在工作中(为了后代的缘故,我可能会加上敏感数据),以及我们需要使用Cakephp 3.0所有功能强大且最少记录的新工具来决定的权力(测试版)。Cakephp 3多个自定义模板formhelpers

编辑:我的目标是创建几个不同的模板,以通过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“制作”或“创建”,但是他们没有举例说明如何做到这一点! lulwut?

我可以很容易地使用它,就像他们的例子一样,但是单个自定义模板中的力量在哪里呢?这对我毫无益处。

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

我得到这个错误(我的观点中)(从下面的代码):

致命错误 错误:类 '配置' 未找到

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

在我看来,一切都很好,但我想将它添加到层次结构中的适当文件y,这样我就不必将它添加到每个视图中,除非它当然会导致整个应用程序的功效问题,所以我不需要将它添加到每个视图中,即

。有谁知道它应该进入哪个文件?问候和TIA!

最新更新:我只是想通了。很简单!在下面检查我的答案!希望这有助于有人

+0

那么你想要什么?这听起来像是一个很长的投诉,但甚至没有告诉我们你的目标是什么?另外,如果仔细阅读文档,这不是关于单个模板,但您可以通过传递一组模板来使用templates()方法自定义任何输出。 – burzum 2014-09-26 22:24:40

+0

正如我所说,是的,我同意这是文件说明,因为它是显而易见的。我的问题是...怎么样?你如何创建这些模板。他们甚至没有在他们提供的例子中创建任何模板。他们只是以单一股票默认为例。如果我想创建三个或四个单独的自定义模板,这是如何完成的?我找到了一个网站:http://www.sanisoft.com/blog/2014/08/11/twitter-bootstrap-forms-cakephp-3/他做了类似的事情,但解释说,由于缺乏文档,他选择通过FormHelper创建自定义小部件作为自定义模板输入表单。 – Urasquirrel 2014-09-26 22:44:52

回答

7

此修复程序的功能是允许您使用引导程序自定义模板表单(来自cakephp 3 !!!!)。如果你想使用表单助手设置大小以及它的所有优点(安全性和不安全性)。

CakePHP的何塞·扎普告诉我要尝试引导插件和小工具,什么不可以,但要做到这一点真正的出路应该是这样的:

第1步:创建配置/ 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']); ?> 
0

比方说,你需要的所有投入使用自定义标记的形式展现了硬编码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>' 
]]); 

如果您需要定义多个模板,只要你想重新使用它们,这里的你c的东西一试(介意我在这里写它,从来没有使用过它):

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

你也可以创建自己的助手,并定义模板那里,等

这真的一切都取决于你想要什么实现,但这应该让你很好地理解模板是如何工作的(不仅仅是在形式上)。

+0

我试过你的最后一个例子,但它给出了一个奇怪的错误。就像我们都是,我是Cake 3.0 beta的新手。 “没有找到类配置”混淆了我。 – Urasquirrel 2014-10-01 20:21:31

+0

更新:我添加了使用“Cake \ Core \ Configure;”在我看来,一切都很好,但我希望将其添加到层次结构中的适当文件中,这样我就不必将其添加到每个视图中,除非它会导致整个应用程序整体的功效问题。 – Urasquirrel 2014-10-01 20:29:57