Zend_Layout を試してみる
昨日からハマっている Zend_Layout を今日もいじってみる。
Smarty を使って表示するのが目標だけど、エラーが出て進めない。
いきなり Smarty じゃなくてデフォルトの Zend_View でまずは試してみる。
昨日書いたコードがこれ。layout.phtml が無いってエラーが発生した。
<?php $layoutPath = 'path/to/layout'; $layoutName = 'default'; $contentKey = 'CONTENTS'; require_once 'Zend/Layout.php'; Zend_Layout::startMvc(); $layout = new Zend_Layout(); $layout->setLayout($layoutName) ->setLayoutPath($layoutPath) ->setContentKey($contentKey) ->setView($view) ->setViewSuffix($viewSuffix);
Zend_Layout のソースを少し追いかけてみた。
<?php public function __construct($options = null, $initMvc = false) { if (null !== $options) { if (is_string($options)) { $this->setLayoutPath($options); } elseif (is_array($options)) { $this->setOptions($options); } elseif ($options instanceof Zend_Config) { $this->setConfig($options); } else { require_once 'Zend/Layout/Exception.php'; throw new Zend_Layout_Exception('Invalid option provided to constructor'); } } $this->_initVarContainer(); if ($initMvc) { $this->_setMvcEnabled(true); $this->_initMvc(); } else { $this->_setMvcEnabled(false); } } public static function startMvc($options = null) { if (null === self::$_mvcInstance) { self::$_mvcInstance = new self($options, true); } else { self::$_mvcInstance->setOptions($options); } return self::$_mvcInstance; }
new Zend_Layout() でインスタンスを生成する場合、第二引数に true を指定する必要があるやん orz
ドキュメントには、第二引数について書かれてない。
例 19.1. オプションをコンストラクタあるいは startMvc() で渡す
コンストラクタおよび静的メソッド startMvc() は、どちらもオプションの配列か Zend_Config オブジェクトを受け取ることができます。 受け取った内容をもとに Zend_Layout インスタンスの設定を行います。
まず、配列を渡す方法を見てみましょう。
<?php // コンストラクタを使用します $layout = new Zend_Layout($options); // startMvc() を使用します $layout = Zend_Layout::startMvc($options); ?>http://framework.zend.com/manual/ja/zend.layout.options.html
というわけで、以下の様にすると、Layout が表示された。
<?php $layoutPath = 'path/to/layout'; $layoutName = 'default'; $contentKey = 'CONTENTS'; require_once 'Zend/Layout.php'; $layout = Zend_Layout::startMvc($options); // new で生成する場合は第二引数を設定する必要がある // $layout = new Zend_Layout($options, true);
ちゃんとドキュメントにも第二引数の事書いて欲しい・・・。
それにしても・・ setMvcEnabled() というメソッドは何故ないんだろう。
_setMvcEnabled() は protected だから外からアクセスできない。
getMvcEnabled() っていう公開メソッドはあるのに・・・。
これがあれば、
<?php $layout = Zend_Layout($option) $layout->setMvcEnabled(true);
って書けるのに。
※ 2008/01/31 追記
ドキュメントに Zend_Layout($option); の第二引数については
英文ドキュメントにそもそも書かれていない。