CodeIgniterの学習 13 - 自作関数、自作クラス等を設置する場所

能書き

CodeIgniterを使うのが適しているケースは、

  1. 「既にある仕組みを再整理したい。」(かつあまりコーディングのやり直しはしたくない)
  2. 「作り方をお仕着せられるのは嫌いだけど、ある程度の軸は有った方がいいよね。」
  3. 「別の言語で作れっつっても、安い技術者確保できねーよ。速く出来ても高くて遅いんじゃ意味ねーじゃん。」
  4. 「教育(学習)に工数を割けないけど、このまま既存のモノを使い続けるのは無理あるしなー。」
  5. フレームワークが廃れてメンテできる人が居なくなるのは怖いなりよ。故にあまりフレームワーク独自の縛りはきつくない方がいいよね。イザとなったら再移植すればいいし。」

という場合だと思う。 (そんなの当たり前だろってつっこみは勘弁してね)

壮大なものを作って一杯資金を確保出来るのなら、話は別かも知れないけど、そうじゃないし。


設置場所

んで、例によって結構な量の俺俺関数や、俺俺クラスや、オープンソースpear改 やらが有るわけだが、

この辺を使おうとすると、CodeIgniterでは、

方法1:プラグイン…単一の関数

application/plugins/oreore_pi.php
で作成して、
$this -> load -> plugin( 'oreore' );
で有効にする。


方法2:ヘルパ…用途別にまとまっている関数群、俺俺関数系

application/helpers/oreore_helper.php
で作成して、
$this -> load -> helper( 'oreore' );
で有効にする。


方法3:ライブラリ…俺俺クラスやら、移植したクラスやら

application/libraries/Oreore.php
で作成して、(頭小文字でも動くけど)
$this -> load -> library( 'oreore' );
で有効にする。($this->oreore->Hoge();で呼べる)

という方法があるようだ。(生成部分のソースはsystem/libraries/Loader.phpの中)




今回は方法3を用いる。

なお、俺俺クラス系でも、
インスタンス化(new)して使う場合($this->oreore->Hoge();で呼び出したい場合)
は方法3を用いるのだけれど、

関数をまとめるだけの目的で、取りあえずclass化したソースがあって、
使う時にインスタンス化したくない(静的にしか呼びたくない)場合は、
方法2のヘルパとして作って、Oreore::Hoge()の形で
静的に呼び出せたので、こんな時はヘルパとして作ってもいいかも。
(内部的にはinclude_onceのみ走る)


ソース:

超適当・実用性皆無、クラス化する意味ないじゃん、書き方古いじゃん というつっこみは無しの方向で。

1)ライブラリ側:application/libraries/Oreore.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//俺俺ライブラリのテスト
class Oreore {

    function Oreore(){
    }

    //オープンハート
    function OpenHeart($str="")
    {
        $ret = <<<___END___
<pre class="aa_openheart">
 ヽ('A`)ノ {$str}
  (  )
  ノω|
</pre>
___END___;
        return $ret;
    } 

    //タイーホ
    function Taiiho($str="")
    {
        $ret = <<<___END___
<pre class="aa_taiiho">
 __[警]
  (  ) ('A`) {$str}
  (  )Vノ )
   | |  | | 
</pre>
___END___;

        return $ret;
    } 
    //連続生成
    function OpenTaiiho($num=1,$str1="",$str2=""){
        $ret = "";
        for($i=0;$i<$num;$i++){
            $ret .= self :: OpenHeart($str1);
            $ret .= self :: Taiiho($str2);
        }
        return $ret ;
    }

} //endofclass

/* End of file Oreore.php */
/* Location: ./application/libraries/Oreore.php */
 ?>


2)コントローラ側:application/controllers/tasklist.php
(ビューの生成箇所のみ抜粋)

<?php
//上略
// ビューの生成 一カ所にまとめた
function _SetTpl( $data )
{ 

  //俺俺ライブラリのテスト
  $this -> load -> library( 'oreore' ); 
  $data["ore1"] = $this->oreore->OpenTaiiho(2,"アンロック","スミマセン");

  //静的メソッドとして呼び出してみる
  //でも実際は$this -> load -> libraryの時点で既にnewされているので、あまり意味がない。
  //ヘルパだとinclude_onceしか走らないので、
  //静的メソッド専用として使いたい時はヘルパに寄せた方がいいかも
  $data["ore2"] = Oreore :: OpenHeart("セイテキニヨビダシ!");
  $data["ore3"] = Oreore :: Taiiho("イミガチガッタヨ");

  // カレンダーの生成
  //$tpl["calendar"] = $this -> _MakeCalendar(); 

  // 大枠のテンプレート側の変数(ヘッダ部分のタイトルと、xajax用javascriptタグ)
  $tpl["page_title"] = "タスクリストにようこそ";
  //$tpl["xajax_js"] = $this -> xajax -> getJavascript( base_url() ); // xajax用javascript生成 

  // タスクリスト(実験ソース)のテンプレートにデータをセット
  $tpl["main_content"] = $this -> load -> view( 'tasklist_view', $data , true ); 

  // 大枠のテンプレートに、タスクリストのビューをはめ込む
  $this -> load -> view( 'base_view', $tpl );
} 
//下略
 ?>


3)ビュー(中身)側:application/views/tasklist_view.php

<h2>↓俺俺ライブラリのテスト↓</h2>
<div class="info blue">
<?=$ore1?>
</div>
<div class="info yellow">
<?=$ore2?>
<?=$ore3?>
</div>


生成結果

こんな感じ



ちょっと本業の進捗が芳しくないんでたぶん明日は休み。