某Webアプリ、スマホアプリ開発の企業に勤めているエンジニアの日記です。主に、技術系記事や本の要約を発信します。

CodeIgniterのMVCモデル

CodeIgniterのMVCモデルの書き方をメインに書いています。

Controller

  • 静的なページを作成するためのクラスを実装したコントローラを作成する。

    作成するクラスは、system/core/Controller.php の CI_Controller クラスを継承させる。

    引数にページの名前を取る。

    そのページをロードするメソッドは、show()

    class Pages extends CI_Controller {

            public function show($page = 'home')
            {
            }

    }
  • クラスの継承
    • オーバーライド:小クラスと親クラスで同じメソッドを使用した場合、コクタスが優先され、親クラスを上書きする。
  • メソッド

    特殊な役割を持つメソッド

    • デフォルトメソッド:index()
      • 第二メソッドが空の時に実行されるメソッド
    • 再マップメソッド:_remap()
      • デフォルトメソッドより優先して呼び出される(デフォルトメソッド必要なくなる)
      • 通常のURIルーティングは無視される。
    • 出力メソッド:_output()
      • ユーザー側のブラウザにデータを返す手前で何らかの処理を行うことができる。
    • コンストラクタメソッド:クラス名と同名()
      • コントローラクラスが呼ばれた時に一度だけ実行される。
      • コントローラ内で共通で使用するライブラリなどを初期化する場合や決まった処理を毎回実行したい場合に便利。
        function __construct() {
            // 親コントローラクラスのコンストラクタを呼び出す            
            parent::__construct();
        }
  • プライベートメソッド:_任意のメソッド名()
    • URLから直接アクセスできない。
    • 以下のような書き方で、デフォルトメソッドを経由して呼び出される。
        function index() 
        {
            echo $this->_private_method();
        }

        function _private_method()
        {
            echo 'プライベートメソッドです';
        }

View

  • 特徴
    • PHP構文とHTMLタグで記述できる
    • ビュー同士の連携が可能で、階層構造をもたせることができる。
    • ヘルパーやライブラリが直接利用できる。
    • キャッシュ機能がある。
    • Smartyのような疑似変数ができる。
  • Viewの読み込み
    $this->load->view('ファイル名', データの連想配列 or オブジェクト)
    <?php 
       class Hello extends CI_Controller
       {  
            // index()メソッドの中身>>'Hello World'
          public function index() 
          { 
             echo "Hello World"; 
          }

            // about()メソッドの中身>>about.php
          public function about() 
          { 
             $this->load->view('about'); 
          }
          
       } 
    ?>
  • ループ
    • foreach構文を使って繰り返し処理を行う。
    // Controller 

    function index()
    {
        $data["title"] = "サンプル"
        $data["contents"] = array("りんご", "みかん")
        $this->load->view("ファイル名", $data);
    }
    <title><?=$title?></title>
    .
    .
    .
    <ul>
        <?php foreach($contents as $item):?>
        <li><?=$item;?></li>
        <?php endforeach;?>
    </ul>

Model

  • Modelの書き方
    <?php 
       class Model_name extends CI_Model 
       { 
          public function __construct()
          { 
             parent::__construct(); 
          } 
       } 
    ?>
  • Modelの読み込み
    • 読み込み
    // /system/application/models/read/read.phpを読み込みたいとき
    $this->load->model('read/read');
  • メソッドの実行
    $this->read->function();