追記(2011-04-28): 2011-04-28 - ひらい ぶらり Hi-Library
CodeIgniter2 を試す (Smarty 編) : あかぎメモ を参考にCodeIgniter2.0でSmarty2.6を使おうとしたらちょいちょいエラーが出たのでメモ。
1つめ
PHP Warning: Call-time pass-by-reference has been deprecated.
みたいなエラーが出た。
どうやら application/libraries/Smarty_parser.phpの中の
$CI =& get_instance();
というところで、強制的に参照渡しにしているのが良くないらしい。
phpマニュアルを見ると、引数を強制的に参照で渡す機能は将来的になくなる可能性があるので、使わないようにとのこと。
ただしCodeIgniterのガイドでは、ライブラリを作るときにコントローラーはこうやって取得してね!みたいなことが書いてある。どうしたものか。後で考える。
とりあえず、Warningを消したければ php.iniでallow_call_time_pass_reference Onにすればいい。
2つめ
Cannot access protected property CI_Output::$final_output
エラーの通り、$final_outpuはプロテクト変数なので、直接代入できないです。
application/libraries/Smarty_parser.php の 87行目辺りを変える
64 function parse($template, $data, $return = FALSE) 65 { 66 if ($template == '') 67 { 68 return FALSE; 69 } 70 71 $CI =& get_instance(); 72 73 $CI->benchmark->mark('smarty_parse_start'); 74 75 if (is_array($data)) 76 { 77 $this->assign(&$data); 78 } 79 80 // make CI object directly accessible from a template (optional) 81 $this->assign_by_ref('CI', $CI); 82 83 $template = $this->fetch($template); 84 85 if ($return == FALSE) 86 { 87 //$CI->output->final_output = $template; 88 $CI->output->set_output($template); 89 } 90 91 $CI->benchmark->mark('smarty_parse_end'); 92 93 return $template; 94 }
とりあえず動いた。