カテゴリ: CodeIgniter 更新日: 2026/01/31

CodeIgniterのフォーム処理を徹底解説!初心者でもわかるViewとControllerの連携

CodeIgniterでフォームを作成する方法(view + controller)
CodeIgniterでフォームを作成する方法(view + controller)

先生と生徒の会話形式で理解しよう

生徒

「CodeIgniterで、ユーザーが文字を入力できる画面を作りたいのですが、どうすればいいですか?」

先生

「それには『フォーム』という機能を使います。入力画面のView(ビュー)と、データを受け取るController(コントローラー)を連携させるのが基本ですよ。」

生徒

「画面と裏側のプログラムを分けるんですね。難しそうですが、私にもできますか?」

先生

「大丈夫です!CodeIgniterには便利な道具がたくさん用意されています。まずは仕組みから順番に学んでいきましょう!」

1. フォーム処理の全体像を知ろう

1. フォーム処理の全体像を知ろう
1. フォーム処理の全体像を知ろう

Webサイトで「お問い合わせ」や「会員登録」をする際に、名前やメールアドレスを入力する枠がありますよね。あれをフォームと呼びます。プログラミング未経験の方にとって、画面に入力した文字がどうやってコンピュータに伝わるのかは不思議に感じるかもしれません。

CodeIgniter(コードイグナイター)というPHPのフレームワークでは、役割分担がハッキリしています。まず、ユーザーが見る見た目の部分をView(ビュー)が担当し、送られてきたデータをどう処理するかを判断する司令塔をController(コントローラー)が担当します。この2つがキャッチボールをすることで、私たちが普段使っているWebサービスは動いています。まずは、この「画面」と「処理」のペアを作るというイメージを大切にしてください。

2. Viewで入力画面を作成する

2. Viewで入力画面を作成する
2. Viewで入力画面を作成する

まずは、ユーザーが文字を打ち込むための「箱」を画面に表示させましょう。CodeIgniterでは、HTMLという言葉を使って画面を作ります。ここでは「お名前」を入力して送信するだけのシンプルな画面を作ってみます。パソコンを触ったことがない方でも、以下のコードを真似して書くことで、入力欄とボタンが表示されます。

form_openという便利な機能を使うと、データの送り先を自動的に設定してくれます。これはCodeIgniter独自の便利な「魔法の言葉」のようなものです。


<!DOCTYPE html>
<html>
<head>
    <title>初めてのフォーム</title>
</head>
<body>
    <h2>お名前を教えてください</h2>
    <form action="confirm" method="post">
        <input type="text" name="username" placeholder="名前を入力">
        <button type="submit">送信する</button>
    </form>
</body>
</html>

このコードの中にあるmethod="post"というのは、「データをこっそり裏側で送る」という通信の決まりごとです。手紙を封筒に入れて送るようなものだと考えてください。反対に、URLにデータが見えてしまう送り方を「GET」と呼びますが、フォームでは「POST」を使うのが一般的です。

3. Controllerでデータを受け取る準備

3. Controllerでデータを受け取る準備
3. Controllerでデータを受け取る準備

画面から「送信ボタン」が押されたとき、そのデータを受け止めるのがコントローラーの役割です。コントローラーは、まるで会社の受付嬢のような存在です。届いた書類(データ)を確認し、適切な部署へ回す指示を出します。

CodeIgniterでは、クラスという大きな箱の中に、メソッドと呼ばれる具体的な「命令」を書いていきます。今回は「index」という命令で入力画面を表示し、「confirm」という命令で届いたデータを確認する流れを作ります。


<?php
// Controllerファイル: app/Controllers/FormController.php
namespace App\Controllers;

class FormController extends BaseController {
    
    // 入力画面を表示するメソッド
    public function index() {
        return view('form_input');
    }

    // 送信されたデータを受け取るメソッド
    public function confirm() {
        // フォームから送られた「username」というデータを取り出す
        $name = $this->request->getPost('username');
        
        // 画面に表示するためにデータを準備する
        $data['user_name'] = $name;
        
        return view('form_result', $data);
    }
}

ここで重要なのは$this->request->getPost('username')という部分です。これは「POSTで送られてきたデータの中から、名前がusernameになっている中身を取ってきて!」というコンピュータへの指示になります。変数(データを一時的に入れる箱)である$nameに、ユーザーが入れた文字が代入されます。

4. 受け取った結果を画面に表示する

4. 受け取った結果を画面に表示する
4. 受け取った結果を画面に表示する

コントローラーが受け取ったデータを、今度は「結果画面」としてユーザーに返してあげましょう。別のViewファイルを作成し、そこに受け取った名前を表示させます。プログラミングでは、一度受け取った情報を加工して、再び画面に出すことで「対話」をしているように見せています。


<!DOCTYPE html>
<html>
<head>
    <title>送信結果</title>
</head>
<body>
    <h2>受付完了</h2>
    <p>ようこそ、<?php echo $user_name; ?> さん!</p>
    <p><a href="/formcontroller">入力画面に戻る</a></p>
</body>
</html>

$user_nameという部分は、先ほどコントローラーで用意したデータが入っています。例えば、入力画面で「田中」と入力して送信すれば、この画面では「ようこそ、田中 さん!」と表示されます。このように、中身が状況によって変わる文字のことをプログラミングでは「変数(へんすう)」と呼びます。

5. ルーティングでURLを設定する

5. ルーティングでURLを設定する
5. ルーティングでURLを設定する

画面とコントローラーを作っても、それらをどうやって呼び出すかを決めなければ動きません。これをルーティングと呼びます。ルーティングは、道路の標識のようなものです。「この住所(URL)に来たら、このコントローラーのこの命令を実行してね」という道案内を記述します。

CodeIgniterでは、app/Config/Routes.phpというファイルに設定を書きます。これを正しく書かないと、画面を表示しようとしても「404 Not Found(そんなページはありません)」というエラーが出てしまいます。


// app/Config/Routes.php の中に追記
$routes->get('form', 'FormController::index');
$routes->post('form/confirm', 'FormController::confirm');

$routes->getはページを読み込むとき、$routes->postはフォームを送信したときに使われます。これで、ブラウザで「自分のサイト/form」にアクセスすれば、私たちが作ったフォームが表示されるようになります。

6. バリデーションで入力をチェックする

6. バリデーションで入力をチェックする
6. バリデーションで入力をチェックする

最後に、とても大切な「バリデーション」という仕組みを解説します。バリデーションとは、日本語で「入力チェック」のことです。例えば、名前が空欄のまま送信されたり、メールアドレスの形式が間違っていたりしたときに、「正しく入力してください」と注意を促す機能です。

これをしないと、システムに不具合が起きたり、悪意のある入力によってサイトが壊されたりする危険があります。初心者の方は、「ユーザーは必ずしも正しく入力してくれるとは限らない」ということを覚えておきましょう。CodeIgniterには、このチェックを自動で行ってくれる非常に強力な機能が備わっています。今回は、名前が未入力でないかを確認する簡単なルールを追加してみましょう。


// バリデーションを取り入れたControllerの例
public function confirm() {
    // 入力ルールを決める(必須入力、3文字以上など)
    $rules = [
        'username' => 'required|min_length[3]'
    ];

    if (!$this->validate($rules)) {
        // もしルールに合格しなかったら、元の画面に戻す
        return view('form_input', ['errors' => $this->validator->getErrors()]);
    }

    // 合格なら結果画面へ
    $name = $this->request->getPost('username');
    return view('form_result', ['user_name' => $name]);
}

このように、required(必須)などの条件を指定するだけで、プログラムが自動でチェックしてくれます。これにより、安全で使いやすいWebアプリケーションを作ることができるのです。最初は難しく感じるかもしれませんが、一つ一つの積み重ねが大きなシステムへと繋がっていきます。

カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New2
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New3
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
New4
Symfony
Symfonyのキャッシュ機構の基本を理解しよう(HTTPとアプリ別)
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.4
Java&Spring記事人気No4
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.5
Java&Spring記事人気No5
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.6
Java&Spring記事人気No6
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.7
Java&Spring記事人気No7
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Laravel
Laravelでコントローラを作成する方法(artisanコマンド)