CodeIgniterのフォーム処理を徹底解説!初心者でもわかるViewとControllerの連携
生徒
「CodeIgniterで、ユーザーが文字を入力できる画面を作りたいのですが、どうすればいいですか?」
先生
「それには『フォーム』という機能を使います。入力画面のView(ビュー)と、データを受け取るController(コントローラー)を連携させるのが基本ですよ。」
生徒
「画面と裏側のプログラムを分けるんですね。難しそうですが、私にもできますか?」
先生
「大丈夫です!CodeIgniterには便利な道具がたくさん用意されています。まずは仕組みから順番に学んでいきましょう!」
1. フォーム処理の全体像を知ろう
Webサイトで「お問い合わせ」や「会員登録」をする際に、名前やメールアドレスを入力する枠がありますよね。あれをフォームと呼びます。プログラミング未経験の方にとって、画面に入力した文字がどうやってコンピュータに伝わるのかは不思議に感じるかもしれません。
CodeIgniter(コードイグナイター)というPHPのフレームワークでは、役割分担がハッキリしています。まず、ユーザーが見る見た目の部分をView(ビュー)が担当し、送られてきたデータをどう処理するかを判断する司令塔をController(コントローラー)が担当します。この2つがキャッチボールをすることで、私たちが普段使っているWebサービスは動いています。まずは、この「画面」と「処理」のペアを作るというイメージを大切にしてください。
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でデータを受け取る準備
画面から「送信ボタン」が押されたとき、そのデータを受け止めるのがコントローラーの役割です。コントローラーは、まるで会社の受付嬢のような存在です。届いた書類(データ)を確認し、適切な部署へ回す指示を出します。
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. 受け取った結果を画面に表示する
コントローラーが受け取ったデータを、今度は「結果画面」としてユーザーに返してあげましょう。別の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を設定する
画面とコントローラーを作っても、それらをどうやって呼び出すかを決めなければ動きません。これをルーティングと呼びます。ルーティングは、道路の標識のようなものです。「この住所(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. バリデーションで入力をチェックする
最後に、とても大切な「バリデーション」という仕組みを解説します。バリデーションとは、日本語で「入力チェック」のことです。例えば、名前が空欄のまま送信されたり、メールアドレスの形式が間違っていたりしたときに、「正しく入力してください」と注意を促す機能です。
これをしないと、システムに不具合が起きたり、悪意のある入力によってサイトが壊されたりする危険があります。初心者の方は、「ユーザーは必ずしも正しく入力してくれるとは限らない」ということを覚えておきましょう。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アプリケーションを作ることができるのです。最初は難しく感じるかもしれませんが、一つ一つの積み重ねが大きなシステムへと繋がっていきます。
まとめ
CodeIgniterのフォーム処理の総まとめ
今回は、CodeIgniterを使ったフォーム処理の基本から応用までを一通り確認しました。フォーム処理は、Webアプリケーション開発の中でも非常に重要な機能であり、ユーザーとのやり取りを実現するための入り口とも言えます。お問い合わせフォーム、ログイン画面、会員登録など、ほとんどのWebサービスで必ず使われる仕組みです。
まず重要なのは、ViewとControllerの役割分担です。Viewはユーザーに見える入力画面を作成し、Controllerは送信されたデータを受け取って処理を行います。この役割分担をしっかり理解することで、コードの見通しがよくなり、保守性の高いアプリケーションを構築できます。
次に、HTMLでフォームを作成し、method属性にpostを指定することで、安全にデータを送信する仕組みを学びました。POST送信は、ユーザーの入力内容をURLに表示せずに送るため、個人情報などを扱う場合には必須の方法です。実務でも頻繁に利用されるため、しっかり理解しておく必要があります。
Controllerでは、requestオブジェクトを利用して送信データを取得しました。getPostメソッドを使うことで、簡単にフォームの値を取得できる点はCodeIgniterの大きな魅力です。取得したデータを配列としてViewに渡すことで、結果画面に表示する流れも重要なポイントです。
また、ルーティングの設定によってURLと処理を結びつける方法も学びました。ルーティングは、アプリケーション全体の動きを決定する重要な設定であり、正しく設定しないとページが表示されません。getとpostの違いを理解し、適切に使い分けることが大切です。
さらに、バリデーション機能によって入力チェックを行う方法も確認しました。requiredやmin_lengthなどのルールを設定することで、不正な入力や空欄を防ぐことができます。これはセキュリティ対策としても非常に重要であり、安全なWebアプリケーション開発には欠かせません。
フォーム処理を正しく実装することで、ユーザー体験の向上にもつながります。入力エラーが分かりやすく表示されることや、スムーズにデータが送信されることは、ユーザー満足度に直結します。初心者のうちは一つ一つの流れを丁寧に理解し、小さな成功体験を積み重ねていくことが大切です。
サンプルプログラムで振り返るフォーム処理
最後に、今回の流れをシンプルなコードで振り返ってみましょう。基本構造を理解することで、応用にも対応できるようになります。
<?php
namespace App\Controllers;
class SampleForm extends BaseController {
public function index() {
return view('sample_form');
}
public function submit() {
$rules = [
'username' => 'required|min_length[3]'
];
if (!$this->validate($rules)) {
return view('sample_form', [
'errors' => $this->validator->getErrors()
]);
}
$name = $this->request->getPost('username');
return view('sample_result', [
'user_name' => $name
]);
}
}
このように、入力画面、処理、結果表示の三つを連携させることで、基本的なフォーム処理は完成します。ここにデータベース連携やメール送信機能を追加することで、より実践的なシステムへと発展させることができます。
生徒
「フォーム処理って、最初は難しそうに見えましたけど、流れを分けて考えると理解しやすいですね。」
先生
「その通りです。Viewで入力、Controllerで処理、そして結果を表示。この流れをしっかり覚えることが大切です。」
生徒
「POSTでデータを送る理由や、バリデーションの必要性もよく分かりました。安全に作るための工夫なんですね。」
先生
「そうです。実際の開発では、セキュリティ対策や入力チェックは必須です。今回学んだ内容はその基礎になります。」
生徒
「ルーティングの設定も重要ですね。最初は見落としそうでした。」
先生
「ルーティングは道案内のようなものです。ここが正しくないと、どんなに良いコードを書いても動きません。」
生徒
「これでフォーム処理の基本は理解できました。次はデータベースと連携してみたいです。」
先生
「いいですね。その一歩が実務レベルへの成長につながります。今回の知識をしっかり定着させて、次に進みましょう。」