CodeIgniter4 フォームヘルパー入門 ― HTMLフォーム生成の実践解説
作成日:2025.03.25
本記事では、CodeIgniter4 のフォームヘルパーを活用して、HTMLフォームを効率的に生成する手法を解説します。基本的な使い方から、CSRF対策や各種入力要素の生成、バリデーション連携の実践例まで、具体的なコードサンプルを交えながら分かりやすく説明しています。
フォームヘルパーとは
フォームを出力・処理する際に便利な関数群で構成されたヘルパーです。
コントローラーでフォームヘルパーをロードする
<?php
namespace App\Controllers;
class Form extends BaseController
{
// フォームヘルパーのロード
protected $helpers = ['form'];
public function getNewform()
{
$data = [
'title' => 'NEW FORM',
];
// フォームのビューファイルを出力
return view('form/newform',$data);
}
}
ビューでフォームヘルパーを使ってHTML要素を出力する
フォームヘルパーには、form
要素や input
要素など、フォームを構成するHTML要素を出力するための関数が多数用意されています。
詳細はForm Helper — CodeIgniter 4.6.0 documentation を参照。
form_open
form
要素の開始タグを出力します。
<?= form_open(
'form/input',
[
'id' => 'element-id',
'class' => 'element-class',
],
);
?>
第一引数に action
属性の値(URL)、第二引数に配列としてその他の属性を渡して使用します。
この関数を利用するメリットは、
- CSRFフィルターが有効になっている場合、CSRFトークンを自動で出力してくれる
- 設定した
baseURL
を元に、自動でURLを出力してくれる
という点です。
上記コードの出力は以下のようになります。
<form action="https://localhost/ci4/form/input" id="element-id" class="element-class" method="post" accept-charset="utf-8">
<input type="hidden" name="projectname_csrf_token" value="dd362ee5a1bcb7343e1ae954e8147e604c386c21de1ef2c74f87a992b392d7ee">
GETメソッドのフォームを出力したい場合は、第二引数に 'method' => 'GET'
を追加すればOKです(※GETメソッドの場合は自動出力されません)。
form_open_multipart
ファイルアップロードフォームを実装するための enctype
属性つきの form
要素の開始タグを出力します。
※参考:PHPとPerlを使ったファイルアップロードとサーバー処理の基本
<?= form_open_multipart(
'form/input',
[
'id' => 'element-id',
'class' => 'element-class',
],
);
?>
出力結果は以下の通り。
<form action="https://localhost/ci4/form/input" id="element-id" class="element-class" enctype="multipart/form-data" method="post" accept-charset="utf-8">
<input type="hidden" name="projectname_csrf_token" value="796450fd7ccb6aa5ec6bd305a664c080e86a123903692f569df693c3fde2690e">
form_close
form
要素の閉じタグを出力するだけの関数です。
正直、</form>
をそのまま書いた方が早いし分かりやすいですが、form_open
や form_open_multipart
を使った場合は、form_close
も使った方がコードとしての統一性があるかと思います。
<?= form_close(); ?>
出力結果は、
</form>
form_input
input
要素を出力する関数です。
<?= form_input([
'name' => 'input_name',
'id' => 'input-id',
'class' => 'input-class',
'value' => 'input-value',
'placeholder' => '名前を入力してください',
'autocomplete' => 'off',
'required' => 'required',
]);
?>
上記コードの出力結果は、
<input type="text" name="input_name" value="input-value" id="input-id" class="input-class" placeholder="名前を入力してください" autocomplete="off" required="required">
となります。
この関数に渡した値は自動的にHTMLエスケープ処理されて出力されるのが、この関数の利点です。※以降のHTML要素出力系関数も同様
type="text"
以外の input
要素を出力したい時は、引数の配列に 'type' => 'number',
のように追加すればOK。
また、form_hidden
、form_password
、form_upload
など、専用の関数もいくつかあります。詳しくは公式ドキュメント参照。
form_textarea
textarea
要素を出力するための関数です。
<?= form_textarea([
'name' => 'textarea_name',
'id' => 'textarea-id',
'class' => 'textarea-class',
'rows' => 5,
'cols' => 200,
'value' => 'textarea value',
'placeholder' => 'テキストを入力してください',
]);
?>
出力結果は、
<textarea name="textarea_name" cols="200" rows="5" id="textarea-id" class="textarea-class" placeholder="テキストを入力してください">textarea value</textarea>
form_dropdown
select
要素及びoption
要素を出力するための関数です。
- 第一引数:
select
要素のname
属性 - 第二引数:
option
要素の配列 - 第三引数:
selected
属性をつけるoption
要素の値 - 第四引数:
select
要素のその他の属性の配列
<?php
$options = [
'osaka' => '大阪府',
'kyoto' => '京都府',
'hyogo' => '兵庫県',
'nara' => '奈良県',
'wakayama' => '和歌山県',
'shiga' => '滋賀県',
];
echo form_dropdown(
'select_name',
$options,
'nara',
[
'id' => 'select-id',
'class' => 'select-class',
'required' => 'required',
]
);
?>
上記コードの出力結果は、
<select name="select_name" id="select-id" class="select-class" required="required">
<option value="osaka">大阪府</option>
<option value="kyoto">京都府</option>
<option value="hyogo">兵庫県</option>
<option value="nara" selected="selected">奈良県</option>
<option value="wakayama">和歌山県</option>
<option value="shiga">滋賀県</option>
</select>
form_checkbox
チェックボックス出力用関数です。
<?= form_checkbox([
'name' => 'checkbox_name',
'id' => 'checkbox-id',
'class' => 'checkbox-class',
'value' => '1',
'checked' => true,
]);
?>
出力結果は、
<input type="checkbox" name="checkbox_name" value="1" checked="checked" id="checkbox-id" class="checkbox-class">
ほぼ同じ使い方ができるラジオボタン用の form_radio
関数もあります。
form_button
button
要素出力用関数です。
<?= form_button([
'type' => 'submit',
'id' => 'button-id',
'class' => 'button-class',
'content' => 'フォーム送信',
]);
?>
出力結果は、
<button type="submit" id="button-id" class="button-class">フォーム送信</button>
フォーム入力のバリデーションエラー時などの出力
フォーム送信後にコントローラー側で入力のバリデーションを行ない、エラーがあった際に再びフォームのビューを出力する、というのはWebアプリケーションにおいて基本の処理です。
この時に、ユーザーが入力していた値をセッションに保持して表示するために役立つ関数もフォームヘルパーには用意されています。
set_value
input type="text"
や textarea
要素などに、入力された値をそのまま出力するための関数です。
<?= form_input([
'name' => 'input_name1',
'value' => set_value('input_name1','default value', false),
]);
?>
<!-- または -->
<input type="text" name="input_name2" value="<?= set_value('input_name2','default value'); ?>">
これで前の画面で入力していた値を取得できます。
第二引数に値を渡すことで、デフォルト値の設定も行なえます。
第三引数を false
に設定すると、HTMLエスケープを無効にします。form_input, form_textarea
関数などの中で set_value
を使う場合は、二重エスケープを避けるために false
を指定します。
set_select
option
要素に selected
を指定するための関数です。
<select name="select_name">
<option value="osaka" <?= set_select('select_name', 'osaka'); ?>>大阪府</option>
<option value="kyoto" <?= set_select('select_name', 'kyoto'); ?>>京都府</option>
<option value="hyogo" <?= set_select('select_name', 'hyogo'); ?>>兵庫県</option>
<option value="nara" <?= set_select('select_name', 'nara' ,true); ?>>奈良県</option>
<option value="wakayama" <?= set_select('select_name', 'wakayama'); ?>>和歌山県</option>
<option value="shiga" <?= set_select('select_name', 'shiga'); ?>>滋賀県</option>
</select>
- 第一引数:
select
要素のname
属性を指定 - 第二引数:
option
要素のvalue
属性を指定 - 第三引数:
true
を指定するとデフォルトでselected="selected"
となる
この関数は、指定した値が送信されていた場合は、文字列selected="selected"
を、送信されていない場合は空文字列を返します。
form_dropdown
関数で select
要素を出力する場合は、代わりに set_value
を使って以下のようにします。
<?php
$options = [
'osaka' => '大阪府',
'kyoto' => '京都府',
'hyogo' => '兵庫県',
'nara' => '奈良県',
'wakayama' => '和歌山県',
'shiga' => '滋賀県',
];
echo form_dropdown(
'select_name',
$options,
set_value('select_name','nara',false),
[
'id' => 'select-id',
'class' => 'select-class',
'required' => 'required',
]
);
?>
set_checkbox
チェックボックスに checked
を指定するための関数です。
<input type="checkbox" name="checkbox_name[]" value="1" <?= set_checkbox('checkbox_name[]', 1, true); ?>>
<input type="checkbox" name="checkbox_name[]" value="2" <?= set_checkbox('checkbox_name[]', 2); ?>>
- 第一引数:
name
属性を指定 - 第二引数:
value
属性を指定 - 第三引数:
true
を指定するとデフォルトでchecked="checked"
となる
この関数は、指定した値が送信されていた場合は、文字列checked="checked"
を、送信されていない場合は空文字列を返します。
ほぼ同じ使い方ができるラジオボタン用の set_radio
関数もあります。
form_checkbox
関数でチェックボックスを出力する場合に同様の挙動をさせるには、代わりに set_value
を使って以下のようにします。
<?= form_checkbox([
'name' => 'checkbox_name',
'id' => 'checkbox-id',
'class' => 'checkbox-class',
'value' => '1',
'checked' => set_value('checkbox_name', '', false) === '1',
]);
?>
まとめ
set_value
等の、入力値をセッションに保持して再出力するための関数は非常に有用で、コードもシンプルになります。
一方、HTML要素を出力するための関数群には、メリットとデメリットがあり、使用するかどうかはプロジェクトによって検討が必要だと思います。
- フォームヘルパーでHTML要素を出力するメリット
-
- 動的に出力する値が自動的にエスケープされる
- CSRFトークンが自動的に発行される(CSRFフィルターを有効にしている場合)
- ベースURLの変更時にコードを変更する必要がない
- フォームヘルパーでHTML要素を出力するデメリット
-
- CodeIgniterのフォームヘルパーでしか使えないヘルパー関数を覚える必要がある
なにげにこの「CodeIgniterのフォームヘルパーでしか使えないヘルパー関数を覚える必要がある」というデメリットは無視できないと思っていて、特に複数人での開発時に、ビューファイルをデザイナーさんやコーダーさんが触る可能性がある場合には、学習コストを強いるのがかなり微妙な気がします。
ヘルパーを使わずにHTMLを直接記述した方が、何をしているのかが多くの人にとって一目でわかって良い気がします。

奈良市を拠点に、25年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。
これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。
【制作会社・企業様向けサポート】
Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。
ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
CodeIgniter 4 URIルーティング入門 ― 手動設定と改善版自動ルーティングの徹底比較
2025.03.22
本記事では、CodeIgniter 4 の URIルーティング機能について、手動ルーティングと自動ルーティング(改善版)の違いや特徴を徹底解説しています。各設定方法の具体例や、ルーティング設定確認の手順を詳しく説明し、開発効率やセキュリティ、柔軟性の観点から最適な選択肢を検討するための情報を提供します。
Windows環境でのCodeIgniter 4.6.0 セットアップガイド―基本設定からセキュリティ対策まで
2025.03.20
CodeIgniter 4.6.0のXAMPP環境へのインストール手順を詳しく解説します。PHPの環境設定から、Composerによるインストール、.envファイルの設定、そしてCSRFやXSS対策などのセキュリティ設定まで、実運用を見据えた導入ガイドをお届けします。
PHP 8.2対応で発生するCodeIgniter3の警告への対処方法
2025.01.30
PHP 8.2では動的プロパティの利用が非推奨となり、CodeIgniter3環境で警告が出る問題が発生します。本記事では、その警告を抑制するための一時的な方法を解説しています。
CodeIgniter 3.xでComposerライブラリを使う設定方法
2023.04.30
CodeIgniter 3.xでComposerでインストールしたPHPライブラリを使うための設定方法を解説します。