Symfoware

Symfowareについての考察blog

CodeIgniter 3 独自Librariesの作り方(General Topics - Creating Libraries)

CodeIgniter User Guide

General TopicsのCreating Librariesについて調べてみます。
Creating Libraries



Creating Libraries



独自のライブラリを作成するには、application/librariesにプログラムファイルを配置します。
ライブラリの作成により、


・全く新規のライブラリ
・既存ライブラリの拡張
・既存ライブラリの置き換え



ということが行えます。

ただし、データベースライブラリの置き換えや拡張は行えません。
データベースライブラリに手を加えたい場合は、新規のライブラリとして定義する必要があります。



Storage



プログラムファイルの配置場所は「application/libraries」になります。
CodeIgniterはライブラリの初期化時、このディレクトリを参照します。



Naming Conventions



命名規約は以下の3つです。

・ファイル名は「Myclass.php」のように大文字から始めます。
・クラス名は「Myclass」のように大文字から始めます。
・ファイル名とクラス名は一致させる必要があります。




The Class File



ライブラリのプログラムのひな形は以下のようになります。


  1. <?php
  2. defined('BASEPATH') OR exit('No direct script access allowed');
  3. class Someclass {
  4.     public function some_method() {
  5.     }
  6. }






Using Your Class



コントローラーからライブラリを初期化する方法は以下のとおり。


  1. $this->load->library('someclass');




拡張子「.php」を付けず、ファイル名の先頭を小文字にした名称を
引数として指定します。

ロードしたライブラリにあるメソッドを呼び出す例です。


  1. $this->someclass->some_method(); // Object instances will always be lower case








Passing Parameters When Initializing Your Class



ライブラリの初期化時、引数を与えたい場合があります。
こんな時は、ライブラリのコンストラクタに引数を追加して対応します。

まず、コントローラーからの呼び出し。
第二引数に、ライブラリのコンストラクタに渡す引数を指定します。


  1. $params = array('type' => 'large', 'color' => 'red');
  2. $this->load->library('someclass', $params);





ロードされるライブラリ側では、コンストラクタで
引数を受け取ります。


  1. <?php defined('BASEPATH') OR exit('No direct script access allowed');
  2. class Someclass {
  3.     public function __construct($params) {
  4.         // Do something with $params
  5.     }
  6. }




この他に、 application/config/に設定ファイルを配置。
ライブラリ側で設定内容を読み取る方法もあります。




Utilizing CodeIgniter Resources within Your Library



ライブラリの中で、
・ヘルパー
・他のライブラリ
・configファイルの内容取得
を行いたい場合があります。


コントローラーでは、


  1. $this->load->helper('url');
  2. $this->load->library('session');
  3. $this->config->item('base_url');




このように、$thisを介してヘルパー等のロードを行いますが、
ライブラリではこの機能はサポートされていません。

ライブラリで同様のことを行いたい場合は、get_instance()を使用して
CodeIgniterオブジェクトを取得。

取得したライブラリを介してヘルパーやライブラリの呼び出しを行います。
具体的なコードは以下のとおりです。


  1. $CI =& get_instance();
  2. $CI->load->helper('url');
  3. $CI->load->library('session');
  4. $CI->config->item('base_url');




※「&」を指定して、参照を取得するのがポイント。


ライブラリ全体のサンプルはこのようになります。


  1. class Example_library {
  2.     protected $CI;
  3.     // We'll use a constructor, as you can't directly call a function
  4.     // from a property definition.
  5.     public function __construct() {
  6.         // Assign the CodeIgniter super-object
  7.         $this->CI =& get_instance();
  8.     }
  9.     public function foo() {
  10.         $this->CI->load->helper('url');
  11.         redirect();
  12.     }
  13.     public function bar() {
  14.         echo $this->CI->config->item('base_url');
  15.     }
  16. }









Replacing Native Libraries with Your Versions



CodeIgniterで用意されているライブラリを、独自のライブラリで置き換えたい場合の解説です。
例えば、「Email」ライブラリを独自実装としたい場合、
「 application/libraries/Email.php」を作成します。

ファイル内に宣言するクラスの前に「CI_」プリフィックスをつけます。


  1. class CI_Email {
  2. }




これで既存のEmailクラスが置き換えられました。
ライブラリのロードはこれまで通りで、自動的にapplication/librariesの
内容が優先的に採用されます。


  1. $this->load->library('email');




※最初に述べましたが、データベースライブラリはこの手法を許可していません。




Extending Native Libraries



既存ライブラリの置き換えではなく、拡張を行いたい場合の解説です。

・extendsに拡張したい既存クラス名を指定
・クラス名には「MY_」というプリフィックスをつける。

というルールがあります。


例として、Emailクラスを拡張してみます。


  1. class MY_Email extends CI_Email {
  2. }





Emailクラスは、コンストラクタに引数を取ります。
こちらも合わせて拡張する必要があります。


  1. class MY_Email extends CI_Email {
  2.     public function __construct($config = array()) {
  3.         parent::__construct($config);
  4.     }
  5. }








Loading Your Sub-class



拡張したライブラリクラスをロードするとき、「MY_」を指定する必要はありません。
上記で作成した「MY_Emal」を呼び出すには以下のようにします。


  1. $this->load->library('email');




メソッドの呼び出しも、通常のライブラリと変わりありません。


  1. $this->email->some_method();





Setting Your Own Prefix



「MY_」というプリフィックスが気に入らない倍は、
application/config/config.phpで変更可能です。


  1. $config['subclass_prefix'] = 'MY_';



ただし、「CI_」というプリフィックスは予約済なので、
使用することはできません。



CodeIgniter 3のユーザーガイド(User Guide)まとめ

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/01/25(日) 14:44:04|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<CodeIgniter 3 Driverの使い方(General Topics - Using CodeIgniter Drivers) | ホーム | CodeIgniter 3 Librariesの使い方(General Topics - Using CodeIgniter Libraries)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1602-52917961
この記事にトラックバックする(FC2ブログユーザー)