コードをDRYに保つために、「クロスコントローラー」変数を定義できるようにしたいと思います。
古典的な例は、ブートスタックにロードされているいくつかの構成アイテムにアクセスしたいというものです。
これを達成するためのベストプラクティスの方法は何ですか?
ティム
いつでもDiコンテナを使用できます。
コンポーネントをDiに登録すると、魔法の方法でコントローラーで使用できるようになります。例えば:
// Bootstrap
$configFile = ROOT_PATH . '/app/config/config.ini';
// Create the new object
$config = new \Phalcon\Config\Adapter\Ini($configFile);
// Store it in the Di container
$this->di->setShared('config', $config);
コントローラーでは、次のように簡単です。
$config = $this->config;
基本コントローラークラスを作成する場合、必要に応じて、次のようにそれらのオブジェクトをビューに渡すことができます。
$this->view->setVar('config', $this->config);
最後に、Diコンテナは、アプリケーションで使用する可能性のあるアイテムを格納するレジストリとしても機能します。
コントローラ内のオブジェクトのブートストラップとアクセスの例については、phalcon/websiteリポジトリを参照してください。とりわけ、ブートストラップとベースコントローラーパターンを実装します。
以下は私の設定です。
[PHP] 5.4.1
[phalcon] 1.2.1
これが私のブートストラップからの抜粋です。(/ app-root / public / index.php)
$di = new \Phalcon\DI\FactoryDefault();
// I'll pass the config to a controller.
$di->set('config', $config);
$application = new \Phalcon\Mvc\Application();
$application->setDI($di);
echo $application->handle()->getContent();
そして、これは私のベースコントローラーからの抜粋です。(/ app-root / app / controllers / ControllerBase.php)
class ControllerBase extends Phalcon\Mvc\Controller
{
protected $config;
protected function initialize()
{
$this->config = $this->di->get('config');
$appName = $this->config->application->appName;