使用布局挂钩后,不再显示CodeIgniter Profiler

时间:2015-01-29 18:45:52

标签: php codeigniter

我只是设置了一个布局钩子来简化我自己的一些工作,但是,我刚刚意识到我的探查器已经消失了。我不太清楚我需要做些什么来恢复它。

如果我重新显示$config['enable_hooks'] = FALSE个人资料,但会破坏我的布局。我假设我必须在我的钩子类中添加一点,但我不确定此时的位置或内容。

class Layout {
    public function index()
    {
        $CI =& get_instance();

        $current_output = $CI->output->get_output();

        if ($CI->uri->segment(1) == 'admin')
            $layout_file = APPPATH . 'views/admin/layout.php';
        else
            $layout_file = APPPATH . 'views/frontend/layout.php';
        $layout = $CI->load->file($layout_file, true);
        $mod_output = str_replace("{yield}", $current_output, $layout);

        //echo $layout_file;
        echo $mod_output;
    }
}

当然,我已在我的控制器中设置$this->output->enable_profiler(TRUE);

非常感谢任何建议或帮助!

1 个答案:

答案 0 :(得分:0)

Profiler消失的原因是因为在Output :: _ display()函数中运行Profiler取决于Output对象。

正如docs解释的那样,当你挂钩“display_override”点时,你会阻止调用Output :: _ display()。

如果要在Layout挂钩中输出Profiler,则需要执行以下操作:

class Layout {
    public function index()
    {
        $CI =& get_instance();

        $current_output = $CI->output->get_output();

        if ($CI->uri->segment(1) == 'admin')
            $layout_file = APPPATH . 'views/admin/layout.php';
        else
            $layout_file = APPPATH . 'views/frontend/layout.php';
        $layout = $CI->load->file($layout_file, true);
        $mod_output = str_replace("{yield}", $current_output, $layout);

        $CI->load->library('profiler');

        if ( ! empty($CI->output->_profiler_sections))
        {
            $CI->profiler->set_sections($CI->output->_profiler_sections);
        }

        // If the output data contains closing </body> and </html> tags
        // we will remove them and add them back after we insert the profile data
        if (preg_match("|</body>.*?</html>|is", $output))
        {
            $mod_output  = preg_replace("|</body>.*?</html>|is", '', $mod_output);
            $mod_output .= $CI->profiler->run();
            $mod_output .= '</body></html>';
         }
         else
         {
            $mod_output .= $CI->profiler->run();
         }

        //echo $layout_file;
        echo $mod_output;
    }
}

我所做的一切就是从Output :: _ display()获取一段代码来处理渲染Profiler输出并将其插入其余的钩子。