コードは次のとおりです:
クラス MY_Loader は CI_Loader を拡張します
{
/**
* ロードされているサービスのリスト
*
* @var 配列
* @access protected
*/
protected $_ci_services = array();
/**
* サービスをロードするパスのリスト
*
* @var 配列
* @access protected
*/
protected $_ci_service_paths = array();
/**
* コンストラクター
*
* サービスファイルへのパスを設定します
*/
パブリック関数 __construct()
{
親::__construct();
$this->_ci_service_paths = array(APPPATH);
}
/**
* サービスローダー
*
* この関数を使用すると、ユーザーはクラスをロードしてインスタンス化できます。
※ユーザーのアプリコントローラーから呼び出されるように設計されています
*
* @param string クラスの名前
* @param オプションのパラメータを組み合わせました
* @param string オプションのオブジェクト名
* @return void
*/
パブリック関数サービス($service = '', $params = NULL, $object_name = NULL)
{
if(is_array($service))
{
foreach($service as $class)
{
$this->service($class, $params);
}
戻ります;
}
if($service == '' または isset($this->_ci_services[$service])) {
FALSE を返します;
}
if(! is_null($params) && ! is_array($params)) {
$params = NULL;
}
$subdir = '';
// サービスはサブフォルダーにありますか?その場合は、ファイル名とパスを解析してください。
if (($last_slash = strrpos($service, '/')) !== FALSE)
{
// パスは最後のスラッシュの前にあります
$subdir = substr($service, 0, $last_slash + 1);
// そしてその背後にあるサービス名
$service = substr($service, $last_slash + 1);
}
foreach($this->_ci_service_paths as $path)
{
$filepath = $path .'service/'.$subdir.$service.'.php';
if ( ! file_exists($filepath))
{
続けます;
}
include_once($filepath);
$service = strto lower($service);
if (空($object_name))
{
$object_name = $service;
}
$service = ucfirst($service);
$CI = &get_instance();
if($params !== NULL)
{
$CI->$object_name = new $service($params);
}
その他
{
$CI->$object_name = 新しい $service();
}
$this->_ci_services[] = $object_name;
戻る;
}
}
}
(3) 簡単な実装例:
コントローラーでサービスを呼び出します:
コードをコピーします コードは次のとおりです:
クラス ユーザーが CI_Controller を拡張します
{
パブリック関数 __construct()
{
親::__construct();
$this->load->service('user_service');
}
パブリック関数login()
{
$name = 'phpddt.com';
$psw = 'パスワード';
print_r($this->user_service->login($name, $psw));
}
}
サービス中のコールモデル:
コードをコピーします コードは次のとおりです:
クラス User_service は MY_Service を拡張します
{
パブリック関数 __construct()
{
親::__construct();
$this->load->model('user_model');
}
パブリック関数ログイン($name, $password)
{
$user = $this->user_model->get_user_by_where($name, $password);
//....
//....
//....
return $user;
}
}
モデルではdb:
のみを扱います
コードをコピーします コードは次のとおりです:
クラス User_model は CI_Model を拡張します
{
パブリック関数 __construct()
{
親::__construct();
}
パブリック関数 get_user_by_where($name, $password)
{
//$this->db
//......
//......
return array('id' => 1, 'name' => 'mckee');
}
}
基本的な実装アイデアは次のとおりです。
それにはすべて練習が必要であり、浅いところから深いところへ進めなければなりません。進捗管理システムやコミュニティなど、人々が開発した単純な CI 機能を探すことをお勧めします。システム内のライブラリとヘルパーを見て、CI の基本的な機能を理解してから、コア フォルダーにアクセスしてみてください。 . 以下のコアファイルを使用できるようになります。
NB CI がどのようなものであっても、PHP の読み込みファイルはすべて、たとえば include です。あまり深く考えずに、単純に開始してください。
http://www.bkjia.com/PHPjc/902774.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/902774.html技術記事 CI フレームワークにサービス層をサポートさせる方法 CI フレームワークのサービス層が CodeIgniter フレームワーク MVC に階層化されており、モデルはデータベースとの通信のみを担当することは誰もが知っています。