CodeIgniterの勉強メモ (1) CIのMVCまとめ

前提:
CodeIgniterのインストールの方法で、CIフレームワークをインストール済みです。
CodeIgniter 2.xを使用。(1.xの場合、継承する親クラスのCI_接頭辞を消す)
(アドレスのindex.phpを注意する。)

CIフレームワークのフォルダ構造

  • <CIフォルダ>/index.php:エントリファイル、修正する必要がない。
  • <CIフォルダ>/system/:CIフレームワークのファイル、修正を入れてはいけない。
  • <CIフォルダ>/application/controllers/:コントローラのフォルダ
  • <CIフォルダ>/application/views/:ビューのフォルダ
  • <CIフォルダ>/application/models/:モデルのフォルダ
  • <CIフォルダ>/application/config/:設定ファイルのフォルダ

MVCとは

Web開発ではどの言語も通用の概念です。

  • Model:データの論理構造・データベース接続を担当。保存されたデータに近い。
  • View:画面出力・情報表現を担当。ユーザに近い
  • Controller:MとVの間にそれぞれ両者と連携し、データを受け取って処理を担当。

Controller

<CIフォルダ>(/index.php)/コントローラ(ファイル名)/アクション(メソッド名)

    命名規則

  • CI_ControllerクラスかCI_Controllerのサブクラスを継承
  • コントローラ名(クラス名):”Controller”を付けなくてもいい。
  • アクション名:メソッド、publicアクセス権
    • 注意:メソッド名の頭文字が「_」(アンダーバー)は不可。
  • ファイル名:小文字、コントローラ名と同じ

例:welcomeコントローラにhogeアクションを追加した

http://localhost/ci/welcome/hogeは下記の実装

//welcome.php
class Welcome extends CI_Controller {
    public function hoge()
    {
        echo "Hello world!";
    }
}

注意:
Indexコントローラを作ると、メソッドindexがアクションにもコンストラクタにもなってしまいます。
検証:ファイル名がindex.php

class Index extends CI_Controller{
    public function index(){
        echo "Hello world!";
    }
}

/index/indexにアクセスしたら、「Hello world!」が二回出力される。

View

  • コントローラ毎に、Viewファイルを分けたほうがいい
    • welcomeコントローラのアクションなら:/application/views/welcome/xxxx.php
    • アクションは複数のビューを読み込むことができる。ビューのファイル名は特に規則がない。

Model

    命名規則

  • CI_ModelクラスかCI_Modelのサブクラスを継承
  • モデル名(クラス):モデル名_model(モデル名の頭文字は大文字)
    • _modelを付けて、Controllerクラスと区別できる
  • ファイル名:モデル名_model.php(全部小文字)

例:ファイル名:machine_model.php

class Machine_model extends CI_Model{
    public function getAll(){
        // データベース処理、結果をreturn
    }
}

ControllerとViewの連携

ビューにデータを渡すには、

$this->load->vars(連想配列)

・Viewでは、連想配列のキーが変数名、配列値が変数値
・例:$datas["yazawa"] = "矢沢"; $datas["minami"] = "南"; $this->load->vars($datas);
・キーに対応しているのは配列(Array)でも可能で、たくさんのデータを転送できる。(連携例に参考)

アクションからビューを読み込む(load)には、
(ファイル名は拡張子のphpを含まない)

$this->load->view("ファイル名")
あるいは、読み込む同時にデータを渡す
$this->load->view("ファイル名", データ配列)

例:Welcome Controllerのhogeアクション

//welcome.php
class Welcome extends CI_Controller {
    public function hoge()
    {
        $datas["yazawa"] = "矢沢";
        $datas["countries"] = array(
            array("country"=>"Japan", "capital"=>"Tokyo"),
            array("country"=>"USA", "capital"=>"New York")
        );
        $this->load->vars($datas);
        // $datasをビューに渡す

        $this->load->view('header');
        $this->load->view('welcome/hoge_body');
        $this->load->view('footer');
        // 複数回のビュー読み込みでヘッダーとアクションを分けられる。
        // welcomeフォルダの中のhoge_body.phpビューファイルが読み込まれた。
    }
}

Viewの中で渡されたデータを使用:
変数名はデータ連想配列のキーで、変数値は連想値です。

echo $yazawa;
// $datas["yazawa"] = "矢沢"; だったので、矢沢が出力される
echo $countries[0]["country"];
// Japanが出力される

ControllerとModelの連携

コントローラからモデルを読み込む(load)には、

$this->load->model('モデルクラス名')
あるいは
$this->load->model('モデルクラス名', '別名')
(繰り返し注意:モデルクラス名の頭文字大文字は命名規則)

読み込んだモデルを使用、モデルのメソッドが自分で定義したもの

$this->モデルクラス名->モデルのメソッド
あるいは
$this->別名->モデルのメソッド

例:

class Welcome extends CI_Controller {
    public function hoge()
    {
        $this->load->model('Machine_model', 'machine')
        // モデルを読み込む、別名machine

        $result = $this->machine->getAll();
        // モデルのメソッドgetAll()

        // ビュー読み込むなどの実装を省略
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>