Zend Frameworkでは、コントローラ内で使用されている$ thisオブジェクトに機能を追加できますか?
私は別のフォルダに保存されたクラスファイルで定義されたAPIを作成しようとしています。だから行きたいと思っています:
$userDetails = $this->api->user()->getDetails();
これは可能ですか?
Zend Frameworkでは、コントローラ内で使用されている$ thisオブジェクトに機能を追加できますか?
私は別のフォルダに保存されたクラスファイルで定義されたAPIを作成しようとしています。だから行きたいと思っています:
$userDetails = $this->api->user()->getDetails();
これは可能ですか?
これは単なるオブジェクトインスタンスへの参照なので、問題のクラスにメソッドやプロパティを追加するだけで済みます。例:
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;
}
}
は、あなた自身のクラスを保存することができ、あなたのライブラリに新しいフォルダを作成します。例: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"
ありがとうございます - これはおそらく私の質問に最適な答えです。私はBootstrapリソースを作るのはうれしいですが、クラスオートローダーをどうやって作るのですか?だから、私は$ this-> api-> className-> Methodを呼び出すことができました。すべてのクラスとメソッドを抑制するapi.phpファイルを作成する必要はありませんでしたか?確かに巧妙で自動化された方法が必要ですか? – Sjwdavies
APIクラスで独自のインフラストラクチャを作成したり、['Zend_Loader_PluginLoader'](http://framework.zend.com/manual/en/zend.loader.pluginloader.html)を活用することもできますが、 APIが使用するすべてのクラスを作成します。これは本当にこの問題とはまったく別の新しい問題です。 – prodigitalson
ありがとう、私はあなたがあなたが含まれているもの以外の例へのリンクを知っているとは思いませんか?すべてのクラスはすでに/ application/apiフォルダに作成されています。 – Sjwdavies