ひらい ぶらり Hi-Library

ぷろぐらみんぐについて。ときどきどうでもいいことについて。

CodeIgniter2.0 でSmarty2.6を使う

追記(2011-04-28): 2011-04-28 - ひらい ぶらり Hi-Library

CodeIgniter2 を試す (Smarty 編) : あかぎメモ を参考にCodeIgniter2.0Smarty2.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     }

とりあえず動いた。