ZendFW + Smarty3の autoloader 併用
ZendFWとSmartyのautoloader が干渉して画面がエラーだらけになるのだが、
検索して、ようやく回避方々を発見。
Warning: include_once(Smarty\Internal\Data.php)
Warning: include_once(Smarty\Internal\Template.php)
http://karenziv.com/2010/09/zend-framework-and-smarty-3/
問題は、
http://okwave.jp/qa/q6495553.html
と同じ物だけれど、回避方法がちょっと違います。
そんなわけで、Autoloaderの初期化はこうなった。
<?php // index.php ( 起動スクリプト ) $application->getAutoloader() ->setFallbackAutoloader(true) ->pushAutoloader(null,"Smarty_") ->unregisterNamespace(array('Zend','ZendX'));
pushAutoloader() の callback 関数にnull を入れた際の挙動は
クラス名のプレフィックス "Smarty_" の際に callback 関数のチェックで null が is_callableに渡されて、無視される。
という事なので、Zend_Autoloader の設定を Smarty クラスの呼び出しより先にする必要がある。
他の autoload を使うライブラリがそれ以上増える場合は、Smartyのautoloaderを一度キャンセルし、Zend_Autoloader に明示的に登録
<?php define("SMARTY_SPL_AUTOLOAD",false); require_once "Smarty.class.php"; //(略) ->pushAutoloader("smartyAutoload","Smarty_");
とか。たぶん。