web-dev-qa-db-ja.com

Cakephp 3.0入力フォームのラッピングdivを変更または削除します

CakePHPがフォームヘルパーで使用するラッピングdivを削除または変更しようとしています。

このコードを使用すると:

 echo $this->Form->input('contact', ['label' => false]);

出力は次のとおりです。

<div class="input text">
  <input type="text" id="contact" maxlength="255" name="contact">
</div>

そして私が欲しいのは:

<div class="myOwnClass">
  <input type="text" id="contact" maxlength="255" name="contact">
</div>

私は以前、CakePHP 2でインプットメソッドにオプションを追加してそれを行っていましたが、最新のCakePHPバージョンではこれは機能しません。手がかりはありますか?

ありがとう

13
jpruizs

FormHelperテンプレートを使用する

すべての入力の折り返しをフォームで変更するには:

$this->Form->templates([
    'inputContainer' => '<div class="myOwnClass">{{content}}</div>'
]);
// or remove completely
$this->Form->templates([
    'inputContainer' => '{{content}}'
]);
// now get input with desired wrapping
echo $this->Form->input('contact', [
    'label' => false
]);

単一入力の折り返しを変更するには:

echo $this->Form->input('contact', [
    'templates' => [
        'inputContainer' => '<div class="myOwnClass">{{content}}</div>'
    ],
    'label' => false
]);

テンプレートの完全なリファレンスについては、FormHelperが使用するテンプレートのカスタマイズを参照してください。

ラッピングをカスタマイズするCakePHP 2スタイルは、バージョン3ではサポートされなくなりました。移行ガイドから:

Div、before、after、between、およびerrorMessageオプションがinput()から削除されました。テンプレートを使用して、ラッピングHTMLを更新できます。テンプレートオプションを使用すると、1つの入力に対して読み込まれたテンプレートを上書きできます。

30
user1418909

購入したUIで作業していますが、cakephp3でいくつかの問題が発生しました。私にとって、<div>のイニシャルを削除するのはそれほど簡単ではありません。

echo $this->Form->control('username', [
  'templates'     => ['inputContainer' => '{{content}}'],
  "type"          => "text",
  "aria-invalid"  => "false",
  "aria-required" => "true",
  "class"         => "form-control valid",
  "placeholder"   => "Ingrese su usuario o email ...",
  "autocomplete"  => "on",
  'label'         => false
]);

結果

<input name="username" aria-invalid="false" aria-required="true" class="form-control valid" placeholder="Ingrese su usuario o email ..." autocomplete="on" id="username" type="text">

入力タグのみを追加します(私のGoogle-Englishで申し訳ありません)

Configフォルダーでテンプレートをグローバルに定義する方が良い方法だと思います。

<?= $this->Form->create($user, array(
    "class" => "ui form", 
    "templates" => "semantic" // The filename in your config folder without .php
)); ?>

Configフォルダーで、ファイルに「semantic.php」というファイルを作成します(任意の名前を付けることができます)。

return array(
    "inputContainer" => '{{content}}' // Here the magic happens
);

お役に立てれば!

3
Mario Kastner