フォームコントロール

フォームコントロールの生成

control('フィールド名', [オプション配列]); を使うと完全のフォームコントロールを生成できる。

<?php

echo $this->Form->create($user);
echo $this->Form->control('username');
echo $this->Form->control('password');
// 'approved' を datetime か timestamp フィールドとみなし、
// 以下は、日・月・年・時・分を生成します
echo $this->Form->control('approved');
// 以下は、テキストエリア要素を生成します
echo $this->Form->control('quote');

echo $this->Form->button('Add');
echo $this->Form->end();

?>

これらのコントロールには、必要に応じて囲い込む div 、 label 、コントロールウィジェット、および検証エラーが含まれる。
また、作成されたコントロールの型はモデルの内部で推測され、カラムのデータ型に依存する。

フィールドの命名規則

フィールド名はエンティティの属性と一致させる必要がある。

<?php
echo $this->Form->create($article);
echo $this->Form->control('title');
echo $this->Form->control('publisher.name'); // 関連するモデルのフォームを生成
?>

control('publisher.name')というフィールドを作成した場合、publisher[name]というname属性になる。

コントロールのオプション

type

フォームのタイプを指定。

<?=
$this->Form->control('field', [
    'type' => 'file'
]); 
?>

出力結果

<div class="input file">
    <label for="field">Field</label>
    <input type="file" name="field" value="" id="field" />
</div>
label

ラベルの見出しを指定。

<?= 
$this->Form->control('name', [
    'label' => 'The User Alias'
]);
?>

出力結果

<div class="input">
    <label for="name">The User Alias</label>
    <input name="name" type="text" value="" id="name" />
</div>
error

デフォルトのエラーメッセージ表示を無効にできる。

<?= $this->Form->control('name', ['error' => false]); ?>

フォーム全体の生成

複数のフォームコントロールの作成

controls([フィールド名の配列], [オプション配列]); で複数のフォームを生成できる。

<?=
$this->Form->controls([
    'name',
    'email'
]);
?>

フォームにオプションを追加する場合。

<?=
$this->Form->controls([
    'name' => ['label' => 'カスタムラベル']
]);
?>
エンティティ全体のフォームコントロールを作成

allControls([フィールド名のオプション配列], [オプション配列]);

<?= $this->Form->allControls(['password' => false]); ?>

'フィールド名' => falseとすると、その属性のフォームの生成が無効になる。