2012-04-23 6 views
1

私はまだOOPには新しく、CodeIgniter2 + Doctrine2で学習しています。CI2の共有関数:ヘルパー?としょうかん?

私は、私のプロジェクトのさまざまな分野で便利ないくつかの共有機能を持っていますので、私はそれらを呼びたいと思います。手続き型PHPでは、それらをライブラリファイルに貼り付け、呼び出すだけです。

Fatal error: Call to undefined method Turn::call_function()

をだから私は多分私がロードする考え出し:しかし、それは、私もあなたがcall_function()を使用するために必要なことをどこかで読んが、唯一の私を得たことを...今私のため

include 'function_library.php'; 
$name = $this -> function_library -> generate_male_name(); 

Message: Undefined property: Turn::$function_library

を働いていませんそれは助手として。

$this->load->helper('character_helper'); 
echo generate_male_name(); 

Fatal error: Using $this when not in object context in /PATH/systemFolder/helpers/character_helper.php on line 19

ライン19:

$query = $this->doctrine->em->createQuery("select max(u.id) from ORM\Dynasties2\Malenames u");

私は図書館としてそれを設定すると考えられるが、正直なところ、それはクラスと、そのような面で私の頭の上に少しを取得するために開始します。私はそれを試していない。ここで

は、その関数の全体です:

function generate_male_name() { 
     $query = $this->doctrine->em->createQuery("select max(u.id) from ORM\Dynasties2\Malenames u"); 
     $result = $query->getSingleResult(); 
     //echo $result2[1]; 
     $highval = $result[1]; 
     $random_name = rand(1,$highval); 
     //echo $random_name; 
     $name = $this->doctrine->em->find('ORM\Dynasties2\Malenames', $random_name); 
     return $name->getName();  
    } 

はどうすればこれを行うことができますか?

編集:

もう少し試してみても、まだ成功していません。

私はTHIRD_PARTYで私function_libraryを入れて、やった:

$this->load->add_package_path(APPPATH.'third_party/function_library/'); 
$name = $this -> generate_male_name(); 

Fatal error: Call to undefined method Turn::generate_male_name()

または$name = $this -> function_library -> generate_male_name();

Message: Undefined property: Turn::$function_library

私はオートローダーでそれを呼び出す夢中ないんだけど、私はそれを必要としませんどこでも、それは効率的ではないようです。

私はライブラリを読んだことがありますが、私が言ったように、クラスはすぐに私の頭の上にあり、新しいライブラリを作成することは私にとって少し難しいようです。

* ここで最善の解決策は何ですか?いくつかの機能をどのように共有しますか?ライブラリには、私が行く必要がある方法です、または私はヘルパーやshared_functions事の仕事をしようとしてではマイナーな何かが足りないのですか?*

+0

設定ファイルでヘルパーを自動読み込みしようとしました。また、ライブラリをthird_partyフォルダに入れて読み込み、そこから呼び出すこともできます。 – Lowkase

+1

codeigniterでは、codeigniterのインスタンスを $ ci =&get_instance();を使用して呼び出すことができます。 doctrineについてはわかりませんが – allen213

+0

http://codeigniter.com/user_guide/general/creating_libraries.html – allen213

答えて

0

たったの約CodeIgniter

Fatal error: Using $this when not in object context in /PATH/systemFolder/helpers/character_helper.php on line 19

を話し、答え
なくてもよいです

CIインスタンスをオブジェクトコンテキスト外の$thisキーワードで使用しようとすると発生します(CIがインスタンス化されていない場合)。上記のエラーを確認すると、helpersフォルダ内にあり、CIオブジェクトコンテキスト外にあるヘルパーcharacter_helper.phpの中に$thisを使用していると推測できます。 CIオブジェクトを使用するには、

$ci = & get_instance(); 

を使用してCIをインスタンス化し、あなたのヘルパーに$ci代わりの$thisを使用する必要があります。

あなたが任意のコントローラ内部であなたのヘルパーを使用する場合、あなたはいつものようにあなたのコントローラ内で正常にそれをロードすることができ、

$this->load->helper('character_helper'); 

つまり、あなたのヘルパーは機能generate_male_nameを持っているならば、あなたは、コントローラ内部でそれを呼び出すことができます次のように

generate_male_name(); 

$this, however, only works directly within your controllers, your models, or your views.

Creating CodeIgniter Libraries.

関連する問題