フォームヘルパー
フォームヘルパーファイルには、フォームの操作を支援する関数が含まれています。
設定
v4.3.0以降、form_helper
関数のvoid HTML要素(例:<input>
)はデフォルトでHTML5互換に変更されました。XHTMLとの互換性を必要とする場合は、**app/Config/DocTypes.php** の$html5
プロパティをfalse
に設定する必要があります。
このヘルパーの読み込み
このヘルパーは、次のコードを使用して読み込まれます。
<?php
helper('form');
フィールド値のエスケープ
フォーム要素内にHTMLや引用符などの文字を使用する必要がある場合があります。安全にそれを行うには、共通関数 esc()
を使用する必要があります。
次の例を考えてみましょう。
<?php
$string = 'Here is a string containing "quoted" text.';
?>
<input type="text" name="myfield" value="<?= $string ?>">
上記の文字列には引用符が含まれているため、フォームが壊れてしまいます。esc()
関数はHTML特殊文字を変換するため、安全に使用できます。
<input type="text" name="myfield" value="<?= esc($string) ?>">
注記
このページにリストされているフォームヘルパー関数のいずれかを使用し、値を連想配列として渡した場合、フォームの値は自動的にエスケープされるため、この関数を呼び出す必要はありません。独自のフォーム要素を作成し、文字列として渡す場合にのみ使用してください。
使用可能な関数
次の関数が使用可能です。
- form_open([$action = ''[, $attributes = ''[, $hidden = []]]])
- パラメーター:
$action (
string
) – フォームアクション/ターゲットURI文字列$attributes (
mixed
) – HTML属性(配列またはエスケープされた文字列)$hidden (
array
) – 隠されたフィールドの定義の配列
- 戻り値:
HTMLフォームの開始タグ
- 戻り値の型:
string
サイトURL(
Config\App::$baseURL
から構築)を使用して、フォームの開始タグを作成します。オプションでフォーム属性と隠された入力フィールドを追加でき、設定ファイルの文字セット値に基づいてaccept-charset属性が常に追加されます。独自のHTMLをハードコーディングするのではなく、このタグを使用する主な利点は、URLが変更された場合でもサイトの移植性を高めることができる点です。
簡単な例を以下に示します。
<?php echo form_open('email/send');
上記の例では、「email/send」URIセグメントを含むサイトURLを指すフォームが作成されます。
<form action="http://example.com/index.php/email/send" method="post" accept-charset="utf-8">
{locale}
も追加できます。<?php echo form_open('{locale}/email/send');
上記の例では、「email/send」URIセグメントを含む、現在のリクエストロケール付きのサイトURLを指すフォームが作成されます。
<form action="http://example.com/index.php/en/email/send" method="post" accept-charset="utf-8">
属性の追加
属性は、次の例のように、連想配列を2番目のパラメーターに渡すことで追加できます。
<?php $attributes = ['class' => 'email', 'id' => 'myform']; echo form_open('email/send', $attributes);
または、2番目のパラメーターを文字列として指定することもできます。
<?php echo form_open('email/send', 'class="email" id="myform"');
上記の例では、次のようなフォームが作成されます。
<form action="http://example.com/index.php/email/send" class="email" id="myform" method="post" accept-charset="utf-8">
CSRFフィルターが有効になっている場合、
form_open()
はフォームの先頭にCSRFフィールドを生成します。$attribute
配列の1つとしてcsrf_idを渡すことで、このフィールドのIDを指定できます。<?php echo form_open('/u/sign-up', ['csrf_id' => 'my-id']);
返します
<form action="http://example.com/index.php/u/sign-up" method="post" accept-charset="utf-8"> <input type="hidden" id="my-id" name="csrf_field" value="964ede6e0ae8a680f7b8eab69136717d">
注記
CSRFフィールドの自動生成を使用するには、フォームページでCSRFフィルターを有効にする必要があります。ほとんどの場合、
GET
メソッドを使用して要求されます。隠された入力フィールドの追加
隠されたフィールドは、次の例のように、連想配列を3番目のパラメーターに渡すことで追加できます。
<?php $hidden = ['username' => 'Joe', 'member_id' => '234']; echo form_open('email/send', '', $hidden);
偽の値を2番目のパラメーターに渡すことで、スキップできます。
上記の例では、次のようなフォームが作成されます。
<form action="http://example.com/index.php/email/send" method="post" accept-charset="utf-8"> <input type="hidden" name="username" value="Joe"> <input type="hidden" name="member_id" value="234">
- form_open_multipart([$action = ''[, $attributes = ''[, $hidden = []]]])
- パラメーター:
$action (
string
) – フォームアクション/ターゲットURI文字列$attributes (
mixed
) – HTML属性(配列またはエスケープされた文字列)$hidden (
array
) – 隠されたフィールドの定義の配列
- 戻り値:
HTMLマルチパートフォームの開始タグ
- 戻り値の型:
string
この関数は上記の
form_open()
と同一ですが、ファイルのアップロードに使用する必要があるmultipart属性が追加されています。
- パラメーター:
$name (
string
) – フィールド名$value (
string
) – フィールド値
- 戻り値:
HTMLの隠された入力フィールドタグ
- 戻り値の型:
string
隠された入力フィールドを生成できます。名前/値の文字列を送信して1つのフィールドを作成するか、
<?php form_hidden('username', 'johndoe'); // Would produce: <input type="hidden" name="username" value="johndoe">
…または連想配列を送信して複数のフィールドを作成できます。
<?php $data = [ 'name' => 'John Doe', 'email' => '[email protected]', 'url' => 'http://example.com', ]; echo form_hidden($data); /* * Would produce: * <input type="hidden" name="name" value="John Doe"> * <input type="hidden" name="email" value="[email protected]"> * <input type="hidden" name="url" value="http://example.com"> */
値フィールドに連想配列を渡すこともできます。
<?php $data = [ 'name' => 'John Doe', 'email' => '[email protected]', 'url' => 'http://example.com', ]; echo form_hidden('my_array', $data); /* * Would produce: * <input type="hidden" name="my_array[name]" value="John Doe"> * <input type="hidden" name="my_array[email]" value="[email protected]"> * <input type="hidden" name="my_array[url]" value="http://example.com"> */
追加の属性を持つ隠された入力フィールドを作成する場合
<?php $data = [ 'type' => 'hidden', 'name' => 'email', 'id' => 'hiddenemail', 'value' => '[email protected]', 'class' => 'hiddenemail', ]; echo form_input($data); /* * Would produce: * <input type="hidden" name="email" value="[email protected]" id="hiddenemail" class="hiddenemail"> */
- form_input([$data = ''[, $value = ''[, $extra = ''[, $type = 'text']]]])
- パラメーター:
$data (
array
) – フィールド属性データ$value (
string
) – フィールド値$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)$type (
string
) – 入力フィールドの種類(例:「text」、「email」、「number」など)
- 戻り値:
HTMLテキスト入力フィールドタグ
- 戻り値の型:
string
標準的なテキスト入力フィールドを生成できます。最小限、1番目と2番目のパラメーターにフィールド名と値を渡すことができます。
<?php echo form_input('username', 'johndoe'); /* * Would produce: * <input type="text" name="username" value="johndoe"> */
または、フォームに含めたい任意のデータを含む連想配列を渡すことができます。
<?php $data = [ 'name' => 'username', 'id' => 'username', 'value' => 'johndoe', 'maxlength' => '100', 'size' => '50', 'style' => 'width:50%', ]; echo form_input($data); /* * Would produce: * <input type="text" name="username" value="johndoe" id="username" maxlength="100" size="50" style="width:50%"> */
ブール属性が必要な場合は、ブール値(
true
/false
)を渡します。この場合、ブール値は重要ではありません。<?php $data = [ 'name' => 'username', 'id' => 'username', 'value' => '', 'required' => true, ]; echo form_input($data); /* * Would produce: * <input type="text" name="username" value="" id="username" required> */
フォームにJavaScriptなどの追加データを含めたい場合は、3番目のパラメータで文字列として渡すことができます。
<?php $js = 'onClick="some_function ()"'; echo form_input('username', 'johndoe', $js); /* * Would produce: * <input type="text" name="username" value="johndoe" onClick="some_function ()"> */
または、配列として渡すこともできます。
<?php $js = ['onClick' => 'some_function ();']; echo form_input('username', 'johndoe', $js); /* * Would produce: * <input type="text" name="username" value="johndoe" onClick="some_function ();"> */
HTML5入力フィールドの拡張範囲をサポートするには、4番目のパラメータを入力タイプとして渡すことができます。
<?php echo form_input('email', '[email protected]', ['placeholder' => 'Email Address...'], 'email'); /* * Would produce: * <input type="email" name="email" value="[email protected]" placeholder="Email Address..."> */
- form_password([$data = ''[, $value = ''[, $extra = '']]])
- パラメーター:
$data (
array
) – フィールド属性データ$value (
string
) – フィールド値$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)
- 戻り値:
HTMLパスワード入力フィールドタグ
- 戻り値の型:
string
この関数は、上記の
form_input()
関数と完全に同じですが、「password」入力タイプを使用します。
- form_upload([$data = ''[, $value = ''[, $extra = '']]])
- パラメーター:
$data (
array
) – フィールド属性データ$value (
string
) – フィールド値$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)
- 戻り値:
HTMLファイルアップロード入力フィールドタグ
- 戻り値の型:
string
この関数は、上記の
form_input()
関数と完全に同じですが、「file」入力タイプを使用するため、ファイルのアップロードに使用できます。
- form_textarea([$data = ''[, $value = ''[, $extra = '']]])
- パラメーター:
$data (
array
) – フィールド属性データ$value (
string
) – フィールド値$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)
- 戻り値:
HTML textareaタグ
- 戻り値の型:
string
この関数は、上記の
form_input()
関数と完全に同じですが、「textarea」タイプを生成します。注記
上記の例では、maxlength属性とsize属性の代わりに、rows属性とcols属性を指定します。
- form_dropdown([$name = ''[, $options = [][, $selected = [][, $extra = '']]]])
- パラメーター:
$name (
string
) – フィールド名$options (
array
) – リストするオプションの連想配列$selected (
array
) – selected属性を付けるフィールドのリスト$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)
- 戻り値:
HTMLドロップダウン選択フィールドタグ
- 戻り値の型:
string
標準的なドロップダウンフィールドを作成できます。最初の引数にはフィールド名、2番目の引数にはオプションの連想配列、3番目の引数には選択する値が入ります。3番目の引数には複数のアイテムの配列を渡すこともでき、ヘルパーは複数選択を作成します。
例
<?php $options = [ 'small' => 'Small Shirt', 'med' => 'Medium Shirt', 'large' => 'Large Shirt', 'xlarge' => 'Extra Large Shirt', ]; $shirts_on_sale = ['small', 'large']; echo form_dropdown('shirts', $options, 'large'); /* * Would produce: * <select name="shirts"> * <option value="small">Small Shirt</option> * <option value="med">Medium Shirt</option> * <option value="large" selected="selected">Large Shirt</option> * <option value="xlarge">Extra Large Shirt</option> * </select> */ echo form_dropdown('shirts', $options, $shirts_on_sale); /* * Would produce: * <select name="shirts" multiple="multiple"> * <option value="small" selected="selected">Small Shirt</option> * <option value="med">Medium Shirt</option> * <option value="large" selected="selected">Large Shirt</option> * <option value="xlarge">Extra Large Shirt</option> * </select> */
開始<select>タグに追加データ(id属性やJavaScriptなど)を含めたい場合は、4番目のパラメータで文字列として渡すことができます。
<?php $js = 'id="shirts" onChange="some_function();"'; echo form_dropdown('shirts', $options, 'large', $js);
または、配列として渡すこともできます。
<?php $js = [ 'id' => 'shirts', 'onChange' => 'some_function();', ]; echo form_dropdown('shirts', $options, 'large', $js);
$options
として渡される配列が多次元配列の場合、form_dropdown()
は、配列のキーをラベルとする<optgroup>を生成します。
- form_multiselect([$name = ''[, $options = [][, $selected = [][, $extra = '']]]])
- パラメーター:
$name (
string
) – フィールド名$options (
array
) – リストするオプションの連想配列$selected (
array
) – selected属性を付けるフィールドのリスト$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)
- 戻り値:
HTMLドロップダウン複数選択フィールドタグ
- 戻り値の型:
string
標準的な複数選択フィールドを作成できます。最初の引数にはフィールド名、2番目の引数にはオプションの連想配列、3番目の引数には選択する値が入ります。
パラメータの使い方は、上記の
form_dropdown()
と同一ですが、フィールド名はPOST配列構文(例:foo[])を使用する必要があります。
- form_fieldset([$legend_text = ''[, $attributes = []]])
- パラメーター:
$legend_text (
string
) – <legend>タグに挿入するテキスト$attributes (
array
) – <fieldset>タグに設定する属性
- 戻り値:
HTML fieldset開始タグ
- 戻り値の型:
string
fieldset/legendフィールドを生成できます。
例
<?php echo form_fieldset('Address Information'); echo "<p>fieldset content here</p>\n"; echo form_fieldset_close(); ?> <!-- Produces: --> <fieldset> <legend>Address Information</legend> <p>form content here</p> </fieldset>
他の関数と同様に、追加属性を設定する場合は、2番目のパラメータに連想配列を渡すことができます。
<?php $attributes = [ 'id' => 'address_info', 'class' => 'address_info', ]; echo form_fieldset('Address Information', $attributes); echo "<p>fieldset content here</p>\n"; echo form_fieldset_close(); ?> <!-- Produces: --> <fieldset id="address_info" class="address_info"> <legend>Address Information</legend> <p>form content here</p> </fieldset>
- form_fieldset_close([$extra = ''])
- パラメーター:
$extra (
string
) – 閉じタグの後に追加する任意のデータ(そのまま追加されます)
- 戻り値:
HTML fieldset閉じタグ
- 戻り値の型:
string
</fieldset>
閉じタグを生成します。この関数を使用する唯一の利点は、タグの下に追加されるデータを関数に渡せることです。例:<?php $string = '</div></div>'; echo form_fieldset_close($string); // Would produce: </fieldset></div></div>
- form_checkbox([$data = ''[, $value = ''[, $checked = false[, $extra = '']]]])
- パラメーター:
$data (
array
) – フィールド属性データ$value (
string
) – フィールド値$checked (
bool
) – チェックボックスをcheckedとしてマークするかどうか$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)
- 戻り値:
HTMLチェックボックス入力タグ
- 戻り値の型:
string
チェックボックスフィールドを生成できます。簡単な例:
<?php echo form_checkbox('newsletter', 'accept', true); // Would produce: <input type="checkbox" name="newsletter" value="accept" checked="checked">
3番目のパラメータには、ボックスをオンにするかどうかを決定するブール値true/falseが入ります。
このヘルパーの他のフォーム関数と同様に、属性の配列を関数に渡すこともできます。
<?php $data = [ 'name' => 'newsletter', 'id' => 'newsletter', 'value' => 'accept', 'checked' => true, 'style' => 'margin:10px', ]; echo form_checkbox($data); // Would produce: <input type="checkbox" name="newsletter" id="newsletter" value="accept" checked="checked" style="margin:10px">
他の関数と同様に、タグにJavaScriptなどの追加データを含めたい場合は、4番目のパラメータで文字列として渡すことができます。
<?php $js = 'onClick="some_function()"'; echo form_checkbox('newsletter', 'accept', true, $js);
または、配列として渡すこともできます。
<?php $js = ['onClick' => 'some_function();']; echo form_checkbox('newsletter', 'accept', true, $js);
- form_radio([$data = ''[, $value = ''[, $checked = false[, $extra = '']]]])
- パラメーター:
$data (
array
) – フィールド属性データ$value (
string
) – フィールド値$checked (
bool
) – ラジオボタンをcheckedとしてマークするかどうか$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)
- 戻り値:
HTMLラジオ入力タグ
- 戻り値の型:
string
この関数は、上記の
form_checkbox()
関数と完全に同じですが、「radio」入力タイプを使用します。
- form_label([$label_text = ''[, $id = ''[, $attributes = []]]])
- パラメーター:
$label_text (
string
) – <label>タグに挿入するテキスト$id (
string
) – ラベルを作成するフォーム要素のID$attributes (
string
) – HTML属性
- 戻り値:
HTMLフィールドラベルタグ
- 戻り値の型:
string
<label>を生成できます。簡単な例:
<?php echo form_label('What is your Name', 'username'); // Would produce: <label for="username">What is your Name</label>
他の関数と同様に、追加属性を設定する場合は、3番目のパラメータに連想配列を渡すことができます。
例
<?php $attributes = [ 'class' => 'mycustomclass', 'style' => 'color: #000;', ]; echo form_label('What is your Name', 'username', $attributes); // Would produce: <label for="username" class="mycustomclass" style="color: #000;">What is your Name</label>
- form_submit([$data = ''[, $value = ''[, $extra = '']]])
- パラメーター:
$data (
string
) – ボタン名$value (
string
) – ボタン値$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)
- 戻り値:
HTML入力送信タグ
- 戻り値の型:
string
標準的な送信ボタンを生成できます。簡単な例:
<?php echo form_submit('mysubmit', 'Submit Post!'); // Would produce: <input type="submit" name="mysubmit" value="Submit Post!">
他の関数と同様に、独自の属性を設定する場合は、最初の引数に連想配列を渡すことができます。3番目の引数を使用すると、JavaScriptなど、フォームに追加データを追加できます。
- form_reset([$data = ''[, $value = ''[, $extra = '']]])
- パラメーター:
$data (
string
) – ボタン名$value (
string
) – ボタン値$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)
- 戻り値:
HTMLの入力リセットボタンタグ
- 戻り値の型:
string
標準のリセットボタンを生成します。
form_submit()
と同様の方法で使用します。
- form_button([$data = ''[, $content = ''[, $extra = '']]])
- パラメーター:
$data (
string
) – ボタン名$content (
string
) – ボタンラベル$extra (
mixed
) – タグに追加する追加属性(配列またはリテラル文字列)
- 戻り値:
HTMLのボタンタグ
- 戻り値の型:
string
標準的なボタン要素を生成します。最小限、ボタン名とコンテンツを最初の2つのパラメータで渡すことができます。
<?php echo form_button('name', 'content'); // Would produce: <button name="name" type="button">Content</button>
または、フォームに含めたい任意のデータを含む連想配列を渡すことができます。
<?php $data = [ 'name' => 'button', 'id' => 'button', 'value' => 'true', 'type' => 'reset', 'content' => 'Reset', ]; echo form_button($data); // Would produce: <button name="button" id="button" value="true" type="reset">Reset</button>
フォームにJavaScriptなどの追加データを含めたい場合は、3番目のパラメータで文字列として渡すことができます。
<?php $js = 'onClick="some_function()"'; echo form_button('mybutton', 'Click Me', $js);
- form_close([$extra = ''])
- パラメーター:
$extra (
string
) – 閉じタグの後に追加する任意のデータ(そのまま追加されます)
- 戻り値:
HTMLフォームの閉じタグ
- 戻り値の型:
string
閉じタグ `
</form>
を生成します。この関数を使用する唯一の利点は、タグの下に追加されるデータを渡せることです。例えば<?php $string = '</div></div>'; echo form_close($string); // Would produce: </form> </div></div>
- set_value($field[, $default = ''[, $html_escape = true]])
- パラメーター:
$field (
string
) – フィールド名$default (
string
) – デフォルト値$html_escape (
bool
) – 値のHTMLエスケープを無効にするかどうか
- 戻り値:
フィールド値
- 戻り値の型:
string
入力フォームまたはテキストエリアの値を設定できます。関数の最初のパラメータでフィールド名を指定する必要があります。2番目(オプション)のパラメータでは、フォームのデフォルト値を設定できます。3番目(オプション)のパラメータでは、値のHTMLエスケープを無効にすることができます。これは、例えば
form_input()
と組み合わせて使用し、二重エスケープを避ける必要がある場合に使用します。例
<input type="text" name="quantity" value="<?= set_value('quantity', '0') ?>" size="50">
上記のフォームは、最初に読み込まれたときに「0」を表示します。
- set_select($field[, $value = ''[, $default = false]])
- パラメーター:
$field (
string
) – フィールド名$value (
string
) – チェックする値$default (
string
) – その値がデフォルト値でもあるかどうか
- 戻り値:
「selected」属性または空文字列
- 戻り値の型:
string
<select>メニューを使用する場合、この関数を使用すると、選択されたメニュー項目を表示できます。
最初のパラメータにはselectメニューの名前、2番目には各項目の値、3番目(オプション)のパラメータには項目をデフォルトとして設定する必要があります(true/falseのブール値を使用)。
例
<select name="myselect"> <option value="one" <?= set_select('myselect', 'one', true) ?>>One</option> <option value="two" <?= set_select('myselect', 'two') ?>>Two</option> <option value="three" <?= set_select('myselect', 'three') ?>>Three</option> </select>
- set_checkbox($field[, $value = ''[, $default = false]])
- パラメーター:
$field (
string
) – フィールド名$value (
string
) – チェックする値$default (
string
) – その値がデフォルト値でもあるかどうか
- 戻り値:
「checked」属性または空文字列
- 戻り値の型:
string
チェックボックスを、送信された状態のまま表示できます。
最初のパラメータにはチェックボックスの名前、2番目にはその値、3番目(オプション)のパラメータには項目をデフォルトとして設定する必要があります(true/falseのブール値を使用)。
例
<input type="checkbox" name="mycheck[]" value="1" <?= set_checkbox('mycheck', '1') ?>> <input type="checkbox" name="mycheck[]" value="2" <?= set_checkbox('mycheck', '2') ?>>
- set_radio($field[, $value = ''[, $default = false]])
- パラメーター:
$field (
string
) – フィールド名$value (
string
) – チェックする値$default (
string
) – その値がデフォルト値でもあるかどうか
- 戻り値:
「checked」属性または空文字列
- 戻り値の型:
string
ラジオボタンを送信された状態のまま表示できます。この関数は、上記の
set_checkbox()
関数と同じです。例
<input type="radio" name="myradio" value="1" <?= set_radio('myradio', '1', true) ?>> <input type="radio" name="myradio" value="2" <?= set_radio('myradio', '2') ?>>
- validation_errors()
バージョン4.3.0の新機能。
- 戻り値:
バリデーションエラー
- 戻り値の型:
配列
バリデーションエラーを返します。まず、この関数はセッションに保存されているバリデーションエラーをチェックします。エラーをセッションに保存するには、
redirect()
と共にwithInput()
を使用する必要があります。返される配列は
Validation::getErrors()
と同じです。バリデーションを参照してください。注記
この関数はモデル内バリデーションでは機能しません。モデルバリデーションでバリデーションエラーを取得する場合は、バリデーションエラーの取得を参照してください。
例
<?php $errors = validation_errors(); ?>
- validation_list_errors($template = 'list')
バージョン4.3.0の新機能。
- パラメーター:
$template (
string
) – バリデーションテンプレート名
- 戻り値:
レンダリングされたバリデーションエラーのHTML
- 戻り値の型:
string
レンダリングされたバリデーションエラーのHTMLを返します。
パラメータ
$template
は、バリデーションテンプレート名です。エラー表示のカスタマイズを参照してください。この関数は内部的に
validation_errors()
を使用します。注記
この関数はモデル内バリデーションでは機能しません。モデルバリデーションでバリデーションエラーを取得する場合は、バリデーションエラーの取得を参照してください。
例
<?= validation_list_errors() ?>
- validation_show_error($field, $template = 'single')
バージョン4.3.0の新機能。
- パラメーター:
$field (
string
) – フィールド名$template (
string
) – バリデーションテンプレート名
- 戻り値:
レンダリングされたバリデーションエラーのHTML
- 戻り値の型:
string
指定されたフィールドの単一のエラーをフォーマットされたHTMLで返します。
パラメータ
$template
は、バリデーションテンプレート名です。エラー表示のカスタマイズを参照してください。この関数は内部的に
validation_errors()
を使用します。注記
この関数はモデル内バリデーションでは機能しません。モデルバリデーションでバリデーションエラーを取得する場合は、バリデーションエラーの取得を参照してください。
例
<?= validation_show_error('username') ?>