主要一個問題是自動加載類執行沖突的問題。 YII注冊了一個自動加載類spl_autoload_register(array('YiiBase','autoload')),SMARTY也注冊了一個自動加載類,spl_autoload_register('smartyAutoload'),YII 注冊在前,這樣在遇到一個類名的時候,先執行的是YII的自定義自動加載類的函數,對應SMARTY里的每個類名而言,也是先調用YII的自動加載類的函 數,但是如果不符合YII自動加載的條件的話,就會執行SMARTY的自動加載類的函數,然而,SMARTY的類名在自動加載類的時候,確符合了YII自 動加載類的邏輯語句,結果就是YII使用Include語句要包含的類肯定找不到。 解決的辦法是:當SMARTY的類自動加載的時候,跳出在YII定義的自動加載函數,這樣就會執行SMARTY的加載函數。 具體實現是,修改YIIBase類里面的autoload函數,增加如下代碼 復制代碼 代碼如下: publicstatic function autoload($className) { // use include so that the error PHP file may appear if(preg_match('/smarty/i', $className)){ //只要類名包含smarty的,無論大小寫,都返回,這樣就跳出了YII自動加載類而去執行 SMARTY的自動加載類函數了 return; } YII自動加載類代碼 }
這樣就可以在每個Action里使用smarty模板了。 復制代碼 代碼如下: public function actionIndex(){ $this- _smarty- assign('test', '測試'); $this- _smarty- display('create.html'); }