2012-07-09 92 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()这样的方法运行两次。

相关问题