私が最近採用した経験則は次のとおりです。
としょうかん
ライブラリは可能な限り独立している必要があります。多くの場合get_instance()
、ライブラリはそれ自体でほとんどのことを処理することになっているため、使用することさえできません。
CodeIgniter 独自のライブラリのように、ライブラリは問題の一般的な解決策と考えてください。それらのほとんど/すべては独立しており、特定の目的を持っています。
あなたが読んForm_validation
で、それがまさにそれがすることです。それが機能するために他のライブラリやモデルは必要ありません。優れたライブラリとは、値を変更するだけで誰もが独自のアプリに使用できるライブラリです$config
。
ライブラリは、ライブラリなどの場合にデータベースクエリを使用できる必要がありsession
ます。構成ファイル内で設定されたテーブル名を使用します。
モデル
モデルは可能な限りデータベース クエリに関連付ける必要がありますが、さらに重要なことは、プロジェクト用にモデルを作成することです。それがライブラリとモデルの違いです。私がつまずいた典型的な問題はこれでした。モデルがデータベース呼び出しのみを処理することになっている場合、プロジェクトに固有の非データベース関数をどこに配置すればよいですか? それらはライブラリにあるべきではなく、ヘルパーにあるのも意味がないので、どこに配置すればよいでしょうか?
これに対する私の解決策は、一般的なモデルを使用することです。他のすべてのモデル ファイルは で終わりますが_model
、私は という名前のモデルを 1 つ持っており、general
これを使用して他のモデルを inside でロードしますapplication/models/general
。を実行する$this->general->load('utester')
と、 から新しいモデルにアクセスできます$this->general->utester
。
さて、これは疑問視される可能性がありますが、これは私が CodeIgniter で 3 年間働いた後の私の結論です。基本的に何でもできるフレームワークです。内部$this->general
では、ロジックがデータベース クエリに直接関係していないことがわかっています。その関数は、の配列を組み立てることform_dropdown()
ができます。それは、ログイン動作のモデルである可能性があります。
ヘルパー
ヘルパーは、ビュー ファイル内の解析に最適です。ビュー内で使用することはできますが$this
、変数をビューに送信する前にサーバー側で可能な限り多くの処理を行うことをお勧めします。残ったものはヘルパー関数で解析する必要があります。関数がビューとコントローラーの両方で頻繁に使用される場合は、それをヘルパーとして使用することもできます。
ヘルパーは、データベース クエリを使用する必要はありません。
私はこの対立に対して独自の解決策を作成しました。あなた自身の解決策を考え出すために、少なくとも少しは刺激を与えられたことを願っています。CodeIgniter で「最善の」解決策を見つけようとしないでください。嫌な思いをすることなく、最も理にかなった解決策を選んでください。私にとっての CodeIgniter とは、独自の解決策を見つける自由を意味します。
そして、私のアプローチに対するあなたの意見を聞いてもかまいません。一部の人は間違っていると考えるかもしれませんが、批評家はあなたの意見であり、それ以上のものではありません.
1) カスタムapplication/models/general.phpのコード
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/* Used for Model scalability */
class General extends CI_Model {
var $loaded = array();
function load($mix)
{
$arr_load = array();
$boo_is_array = is_array($mix);
$boo_return_class = ! $boo_is_array;
if ($boo_is_array)
$arr_load = $mix;
else
$arr_load[] = $mix;
foreach ($arr_load as $int_key => $str_class) {
$str_lower = strtolower($str_class);
$str_name = ucfirst($str_class);
$str_file = APPPATH . "models/general/{$str_lower}.php";
$boo_success = FALSE;
if (file_exists($str_file))
if ( ! in_array($str_lower, $this->loaded)) {
require_once $str_file;
$this->$str_lower = new $str_name();
$boo_success = TRUE;
}
if ( ! $boo_success)
unset($arr_load[$int_key]);
}
if ($boo_return_class)
return $this->$str_lower;
return (bool) count($arr_load);
}
}