2012-02-24 25 views
0

Zend Frameworkでは、コントローラ内で使用されている$ thisオブジェクトに機能を追加できますか?

私は別のフォルダに保存されたクラスファイルで定義されたAPIを作成しようとしています。だから行きたいと思っています:

$userDetails = $this->api->user()->getDetails(); 

これは可能ですか?

答えて

1

これは単なるオブジェクトインスタンスへの参照なので、問題のクラスにメソッドやプロパティを追加するだけで済みます。例:

class MyController extends Zend_Controller_Action 
{ 
    protected $api = null; 

    public function init() 
    { 
     $this->api = new ApiClass(); 
    } 

    public function indexAction() 
    { 
     $this->api->user()->details(); 
    } 


} 

もちろん、これはおそらく最も良い方法です。私はおそらく、ブートストラップリソースとしてその場合のヤウドでAPIを置く行います

class MyController extends Zend_Controller_Action 
{ 

    public function indexAction() 
    { 
     $this->getApi()->user()->details(); 
    } 

    public function getApi() 
    { 
     return $this->getInvokeArg('bootstrap')->api; 
    } 
} 
+0

ありがとうございます - これはおそらく私の質問に最適な答えです。私はBootstrapリソースを作るのはうれしいですが、クラスオートローダーをどうやって作るのですか?だから、私は$ this-> api-> className-> Methodを呼び出すことができました。すべてのクラスとメソッドを抑制するapi.phpファイルを作成する必要はありませんでしたか?確かに巧妙で自動化された方法が必要ですか? – Sjwdavies

+0

APIクラスで独自のインフラストラクチャを作成したり、['Zend_Loader_PluginLoader'](http://framework.zend.com/manual/en/zend.loader.pluginloader.html)を活用することもできますが、 APIが使用するすべてのクラスを作成します。これは本当にこの問題とはまったく別の新しい問題です。 – prodigitalson

+0

ありがとう、私はあなたがあなたが含まれているもの以外の例へのリンクを知っているとは思いませんか?すべてのクラスはすでに/ application/apiフォルダに作成されています。 – Sjwdavies

1

は、あなた自身のクラスを保存することができ、あなたのライブラリに新しいフォルダを作成します。例:Sjwdavies は、新しいファイルを作成します。Sjwdavies/Controller/Action.php

class Sjwdavies_Controller_Action extends Zend_Controller_Action 
{ 
    public $api; 
} 

をお使いのコントローラは、今、このクラスを拡張する必要があります。

class IndexController extends Sjwdavies_Controller_Action 
{ 
    public $api; 
} 

はあなたのapplication.iniにライブラリパスを含めるようにしてください:

includePaths.library = APPLICATION_PATH "../../library" 
関連する問題