2012-07-09 148 views
1

我使用CakePHP的2.2.0和我有這樣的AppController:爲什麼beforeRender()被調用兩次?

<?php 
    App::uses('Controller', 'Controller'); 

    class AppController extends Controller { 
     public function beforeRender(){ 
      debug('test'); 
     } 
    } 
?> 

和這個簡單的定製控制器:

<?php 

App::uses('AppController', 'Controller'); 

class ProvidersController extends AppController { 

    public function index(){ 
     debug('index'); 
    } 

} 

?> 

我真的不明白爲什麼AppController中的beforeRender被稱爲兩次。 ..當URL到達ProvidersController的index()方法時,我會在調試模式下看到兩個「測試」字符串。

有人能解釋嗎?

+0

不知道爲什麼,你可以在beforeRender中嘗試'debug_print_backtrace()'看看是什麼調用它.. – Dunhamzzz 2012-07-09 10:54:49

+1

有些人建議''beforeRender'一次觸發佈局,一次觸發'$ content_for_layout'(視圖);或許就是這樣。 – Ross 2012-07-09 12:33:27

回答

2

我已經看到這種行爲,當我有代碼中的其他地方破損src。例如,如果找不到javascript文件,cake將會啓動,導致邏輯再次運行。這也許可以解釋爲什麼你看到像beforeRender()這樣的方法運行兩次。

相關問題