CodeIgniterのビューとは?役割と基本的な使い方を初心者向けに完全解説
生徒
「CodeIgniterでWebページを表示するには、どうしたらいいんですか?」
先生
「それには、ビューという仕組みを使います。ビューを使えば、HTMLで画面を簡単に作れますよ。」
生徒
「ビューって何ですか?どうやって使うんでしょうか?」
先生
「それでは、CodeIgniterのビューの基本から、実際の使い方まで順番に見ていきましょう!」
1. CodeIgniterのビューとは?
CodeIgniterのビューとは、Webページとして表示されるHTML部分を管理するファイルのことです。例えば、お店で例えるなら、キッチン(プログラムの処理部分)で料理を作り、その料理をお客様に見せる「お皿」がビューだと考えてください。
CodeIgniterはMVCアーキテクチャという設計パターンを採用しています。MVCとは、Model(モデル)、View(ビュー)、Controller(コントローラー)の頭文字を取ったもので、それぞれ役割が分かれています。
- Model(モデル):データベースとのやり取りを担当
- Controller(コントローラー):処理の流れを制御する司令塔
- View(ビュー):ユーザーに見せる画面を作成
ビューファイルは、通常application/views/フォルダの中に保存されます。ビューの中には、HTMLタグやCSS、JavaScriptなどを書くことができ、PHPのコードも埋め込むことが可能です。これにより、動的なWebページを簡単に作成できるのです。
2. ビューファイルの作成方法
それでは、実際にビューファイルを作ってみましょう。まず、application/views/フォルダの中に、新しいファイルを作成します。ファイル名はwelcome_view.phpとします。
ビューファイルの中には、通常のHTMLを書くことができます。以下は、シンプルなビューファイルの例です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ようこそ</title>
</head>
<body>
<h1>CodeIgniterへようこそ!</h1>
<p>これは最初のビューファイルです。</p>
</body>
</html>
このファイルをapplication/views/welcome_view.phpとして保存します。ファイル名は自由に決められますが、わかりやすい名前を付けることが重要です。拡張子は必ず.phpにしてください。
3. コントローラーからビューを読み込む基本
作成したビューファイルを表示するには、コントローラーから呼び出す必要があります。コントローラーは、ビューを読み込むための指示を出す役割を持っています。
コントローラーファイルはapplication/controllers/フォルダに保存されます。例として、Welcome.phpという名前のコントローラーを作成してみましょう。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
// ビューファイルを読み込む
$this->load->view('welcome_view');
}
}
このコードの重要なポイントは、$this->load->view('welcome_view');という部分です。この命令で、先ほど作成したwelcome_view.phpファイルが読み込まれ、ブラウザに表示されます。loadは読み込みを意味し、viewはビューファイルを指定しています。
ファイル名を指定するときは、拡張子の.phpは書かなくても大丈夫です。CodeIgniterが自動的に認識してくれます。
4. ビューにデータを渡す方法
ビューをもっと便利に使うために、コントローラーからビューにデータを渡す方法を学びましょう。例えば、ユーザーの名前や商品情報などを、コントローラーからビューに送ることができます。
データを渡すには、配列を使います。配列とは、複数のデータをまとめて管理できる入れ物のようなものです。以下のコードを見てください。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
// ビューに渡すデータを配列で準備
$data['title'] = 'CodeIgniterの学習';
$data['message'] = 'ビューの使い方を学んでいます!';
$data['username'] = '田中太郎';
// データを渡してビューを読み込む
$this->load->view('welcome_view', $data);
}
}
ここでは、$dataという配列を作成し、その中にtitle、message、usernameという3つの情報を入れています。そして、$this->load->view()の第二引数に$dataを渡すことで、ビュー側でこれらのデータが使えるようになります。
ビューファイル側では、配列のキー名がそのまま変数として使えます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title><?php echo $title; ?></title>
</head>
<body>
<h1><?php echo $message; ?></h1>
<p>ユーザー名: <?php echo $username; ?></p>
</body>
</html>
このように、と書くことで、コントローラーから渡された値が表示されます。echoは画面に文字を出力する命令です。
5. 複数のビューを組み合わせる
実際のWebサイトでは、ヘッダー、コンテンツ、フッターなど、複数のパーツを組み合わせてページを作ります。CodeIgniterでは、複数のビューファイルを読み込んで、一つのページとして表示することができます。
例えば、header_view.php、content_view.php、footer_view.phpという3つのビューファイルを作り、それらを組み合わせることができます。コントローラーでは次のように書きます。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Page extends CI_Controller {
public function display()
{
$data['page_title'] = '私のWebサイト';
// 複数のビューを順番に読み込む
$this->load->view('header_view', $data);
$this->load->view('content_view', $data);
$this->load->view('footer_view', $data);
}
}
このように、$this->load->view()を複数回呼び出すことで、ヘッダー、コンテンツ、フッターが順番に表示され、一つの完成したページになります。各ビューファイルに同じ$dataを渡すことで、すべてのビューで同じデータを利用できます。
この方法を使えば、共通のヘッダーやフッターを一度作るだけで、複数のページで再利用できるため、とても効率的です。
6. ビューのデータをループで表示する
データベースから取得した複数の商品情報やニュース記事など、たくさんのデータをビューで表示したい場合があります。そんなときは、ループ処理を使います。
ループ処理とは、同じ処理を繰り返し実行することです。PHPではforeachという命令を使って、配列の中身を一つずつ取り出して処理できます。コントローラーで配列データを準備し、ビューで表示してみましょう。
まず、コントローラーで商品リストを作成します。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Product extends CI_Controller {
public function list_products()
{
// 商品データの配列を準備
$data['products'] = array(
array('name' => 'ノートパソコン', 'price' => 89000),
array('name' => 'マウス', 'price' => 2500),
array('name' => 'キーボード', 'price' => 4800),
array('name' => 'モニター', 'price' => 25000)
);
$this->load->view('product_list_view', $data);
}
}
次に、ビューファイルproduct_list_view.phpでループを使って表示します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>商品一覧</title>
</head>
<body>
<h1>商品一覧</h1>
<ul>
<?php foreach ($products as $product): ?>
<li><?php echo $product['name']; ?> - <?php echo number_format($product['price']); ?>円</li>
<?php endforeach; ?>
</ul>
</body>
</html>
実行すると、次のような結果が表示されます。
商品一覧
・ノートパソコン - 89,000円
・マウス - 2,500円
・キーボード - 4,800円
・モニター - 25,000円
foreachを使うことで、配列の中のデータを一つずつ取り出し、それぞれをリスト形式で表示できます。number_format()は数字を三桁ごとにカンマで区切る関数で、見やすくするために使っています。
7. ビューでの条件分岐
ビューの中では、条件によって表示内容を変えることもできます。例えば、ユーザーがログインしているかどうかで、表示するメッセージを変えたい場合などに使います。
PHPのif文を使えば、条件分岐が簡単にできます。以下の例では、在庫の有無によって表示を変えています。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>商品詳細</title>
</head>
<body>
<h1>商品詳細</h1>
<p>商品名: <?php echo $product_name; ?></p>
<p>価格: <?php echo number_format($price); ?>円</p>
<?php if ($stock > 0): ?>
<p class="text-success">在庫あり(残り<?php echo $stock; ?>個)</p>
<button class="btn btn-primary">購入する</button>
<?php else: ?>
<p class="text-danger">現在、在庫切れです</p>
<button class="btn btn-secondary" disabled>購入できません</button>
<?php endif; ?>
</body>
</html>
このコードでは、$stockという変数の値が0より大きい場合は「在庫あり」と表示し、購入ボタンを有効にします。在庫がない場合は「在庫切れです」と表示し、ボタンを無効にします。このように、ビューの中で条件分岐を使うことで、状況に応じた柔軟な表示ができます。
8. ビューファイルの整理とベストプラクティス
Webアプリケーションが大きくなると、ビューファイルもたくさん増えていきます。そのため、ファイルを整理して管理しやすくすることが重要です。
CodeIgniterでは、application/views/フォルダの中にサブフォルダを作って、ビューファイルを分類することができます。例えば、次のような構造にすると管理しやすくなります。
- application/views/layouts/ - ヘッダーやフッターなど共通パーツ
- application/views/products/ - 商品関連のビュー
- application/views/users/ - ユーザー関連のビュー
- application/views/pages/ - 通常のページのビュー
サブフォルダを使う場合は、コントローラーでビューを読み込むときにフォルダ名も指定します。例えば、$this->load->view('products/product_list');のように書きます。
また、ビューファイルの中にはできるだけ複雑な処理を書かないことも大切です。データの加工や計算などはコントローラーやモデルで行い、ビューは表示だけに専念させることで、コードが読みやすくなり、メンテナンスも楽になります。
9. ビューのキャッシュ機能
CodeIgniterには、ビューをキャッシュする機能があります。キャッシュとは、一度表示したページの内容を保存しておき、次回からはその保存データを使って表示することで、処理速度を速くする仕組みです。
頻繁に更新されないページ、例えば会社概要や利用規約などのページは、キャッシュを使うことで表示が速くなり、サーバーの負担も減らせます。
キャッシュを有効にするには、コントローラーで$this->output->cache()メソッドを使います。引数には、キャッシュを保持する時間を分単位で指定します。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Info extends CI_Controller {
public function about()
{
// 60分間キャッシュを保持
$this->output->cache(60);
$data['title'] = '会社概要';
$this->load->view('about_view', $data);
}
}
この例では、会社概要ページを60分間キャッシュします。最初にアクセスした人の表示は通常の速度ですが、その後60分間は誰がアクセスしても、保存されたページが高速で表示されます。60分経過すると、キャッシュが自動的にクリアされ、新しい内容が生成されます。
ただし、ユーザーごとに内容が変わるページ(マイページなど)では、キャッシュを使わないように注意してください。全員に同じ内容が表示されてしまいます。
10. ビューの戻り値を取得する方法
通常、$this->load->view()を使うと、ビューの内容がそのままブラウザに出力されます。しかし、場合によっては、ビューの内容を変数に格納してから処理したいこともあります。
そんなときは、$this->load->view()の第三引数にTRUEを指定します。すると、ビューの内容が文字列として返されるので、それを変数に保存できます。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Email extends CI_Controller {
public function send_notification()
{
$data['username'] = '佐藤花子';
$data['message'] = 'ご注文ありがとうございます';
// ビューの内容を変数に格納
$email_body = $this->load->view('email_template', $data, TRUE);
// メール送信処理(例)
// $this->email->message($email_body);
// $this->email->send();
echo 'メールを送信しました';
}
}
この方法は、メールの本文をビューで作成する場合などに便利です。ビューファイルでHTMLメールのテンプレートを作成し、その内容を取得してメール送信処理に渡すことができます。
第三引数をTRUEにすることで、ビューの柔軟な活用が可能になり、より高度な処理ができるようになります。