2017-12-09 7 views
1

ビューでsetTemplates()を何度も使用しようとしていますが、期待通りに動作しません。CakePHP 3.4 setTemplates()を何度も使用する

私は、私が必要とするときに設定したいテンプレートが2つあります。

$bootstrapTemplate = [ 
    'inputContainer' => '<div class="form-group {{type}}{{required}}">{{content}}</div>', 
]; 

$bootstrapTemplateInputGroup = [ 
    'inputContainer' => '<div class="form-group {{type}}{{required}}">{{content}}</div>', 
    'input' => '<div class="input-group"><div class="input-group-addon">€</div><input type="{{type}}" name="{{name}}"{{attrs}}/></div>' 
]; 

は私が

$this->Form->setTemplates($bootstrapTemplate); 

$this->Form->control('title', ['class' => 'form-control', 'label' => __('Titel')]); 

// OUTPUT - correct 
// <div class="form-group text required"><label for="title">Titel</label><input type="text" name="title" class="form-control" required="required" maxlength="255" id="title"></div> 

$this->Form->setTemplates($bootstrapTemplateInputGroup); 
echo $this->Form->control('price', ['class' => 'form-control', 'id' => 'price_eur', 'label' => __('Preis EUR')]).'</div>'; 

// OUTPUT - correct 
<div class="form-group number required"><label for="price_eur">Preis EUR</label><div class="input-group"><div class="input-group-addon">€</div><input type="number" name="price" class="form-control" id="price_eur" required="required" step="any"></div></div> 

は、今私は戻って動作するようには思えない$bootstrapTemplateに切り替えたい、このようにテンプレートを設定し始めます。私はここで間違ってやっている何

<div class="form-group text required"><label for="user_zip">PLZ</label><input type="text" name="user_zip" class="form-control" required="required" maxlength="255" id="user_zip"></div> 

:代わりに$bootstrapTemplateInputGroup

$this->Form->setTemplates($bootstrapTemplate); 
echo $this->Form->control('user_zip', ['class' => 'form-control', 'id' => 'user_zip', 'label' => __('PLZ')]) 

// OUTPUT - wrong 
<div class="form-group text"><label for="user_zip">PLZ</label><div class="input-group"><div class="input-group-addon">€</div><input type="text" name="user_zip" class="form-control" id="user_zip"></div></div> 

は私の予想出力のような$bootstrapTemplateのテンプレートで使用されていますか?

答えて

2

FormHelper::setTemplates()既存のテンプレートセット全体を上書きしないで、指定したテンプレートとマージします。すなわち、inputテンプレートセットが変更されたままになります。

あなたはどちらか(店舗)へpush()にとpop()を持つことを避けるために、基本となるtemplaterを使用してテンプレート・スタック(復元)から:

$this->Form->templater()->push(); 
$this->Form->templater()->add($bootstrapTemplateInputGroup); 
$this->Form->templater()->pop(); 

かにテンプレートを適用するFormHelper::create()方法のtemplatesオプションを使用します特定FormHelper::control()コール(S)のみ:

echo $this->Form->control('title', ['templates' => $bootstrapTemplate, /*...*/]); 
echo $this->Form->control('price', ['templates' => $bootstrapTemplateInputGroup, /*...*/]); 
echo $this->Form->control('user_zip', ['templates' => $bootstrapTemplate, /*...*/]); 

も参照してください。
+0

おかげで...私は( 'user_zip'、[ 'テンプレート' => $ bootstrapTemplate、 'エコーます$ this->フォーム - >コントロールのために行ってきました...ソリューション。それはより簡単ではるかに読みやすくなります。 –

関連する問題