Codeigniter MY_loader 未加载

Posted

技术标签:

【中文标题】Codeigniter MY_loader 未加载【英文标题】:Codeigniter MY_loader is not loading 【发布时间】:2017-07-05 00:30:38 【问题描述】:

我正在尝试在 CodeIgniter 中创建类似于以下描述的页眉/正文/页脚模板: Header and footer in CodeIgniter

我的代码存储在\application\core\MY_loader.php

<?php
class MY_Loader extends CI_Loader 

    public function load_template($template_name, $vars = array(), $return = FALSE)
    
        if($return):
            $content  = $this -> view('templates/header', $vars, $return);
            $content .= $this -> view($template_name, $vars, $return);
            $content .= $this -> view('templates/footer', $vars, $return);

            return $content;

        else:
            $this -> view('templates/header', $vars);
            $this -> view($template_name, $vars);
            $this -> view('templates/footer', $vars);

        endif;
    

?>

我的控制器代码存储在 application\controllers\managers.php:

class Managers extends CI_Controller 
    function login()
    
        $this -> load -> load_template('managers/login');
    

当我浏览到 BASE_URL/managers/login 时,我收到以下错误:

调用未定义的方法 CI_Loader::load_template()

我对此的解释是,系统没有使用 MY_Loader 扩展 CI_Loader,而是完全忽略了 MY_Loader。当我在 XAMPP 下运行它时,此设置在我的站点本地安装上运行,但在我将站点移植到 Web 主机后它停止工作。我不记得更改 CI 配置(尽管我可能有),也不知道这是否是由于新主机的配置问题造成的。

我正在寻找有关可能阻止 MY_loader 扩展 CI_loader 的任何指导。我还没有找到任何类似的报告;我发现的与 MY_loader 相关的所有其他问题都假定覆盖已经起作用。

【问题讨论】:

将文件另存为MY_Loader.php 该文件已使用该名称保存。 抱歉...我错过了“Loader”的大写字母。你是对的。 【参考方案1】:

该文件必须命名为“MY_Loader.php” - 它区分大小写,并且与“MY_loader.php”不同。

与此时唯一的其他答案相反,“My_loader.php”也不起作用,因为 subclass_prefix 与库名称分开应用。

最简单的例子是这样的:

$libraryName = 'loader';

$className   = ucfirst(strtolower($libraryName));
$className   = config_item('subclass_prefix').$className;

$fileName    = $className.'.php';

【讨论】:

【参考方案2】:

将此另存为MY_Loader.php(感谢其他朋友的建议,“L”也必须是大写字母)

    public function load_template($template_name, $vars = array(), $return = FALSE)
    
        $CI = & get_instance();
        if($return):
            $content  = $CI->load->view('templates/header', $vars, $return);
            $content .= $CI->load->view($template_name, $vars, $return);
            $content .= $CI->load->view('templates/footer', $vars, $return);

            return $content;

        else:
            $CI->load->view('templates/header', $vars);
            $CI->load->view($template_name, $vars);
            $CI->load->view('templates/footer', $vars);

        endif;
    

?>

我希望我能帮上忙。祝你有美好的一天。

【讨论】:

谢谢,但我遇到了同样的错误:调用未定义的方法 CI_Loader::load_template() 我认为问题不在于 load_template() 代码--我认为系统首先没有找到 MY_Loader 模块。 你在使用 CodeIgniter2 吗?您可以尝试将“MY_loader”添加到库部分的 application/config/autoload.php 中 如果它没有再次工作。尝试使用帮助程序(例如 application/helpers 文件夹中的 Login_helper.php)并在配置文件夹中使用自动加载器加载帮助程序($autoload['helper'] = array('Login');)然后调用函数。 İ如果您仍然需要帮助İ可以在答案中添加这些 @jdiz414 检查 config.php 哪个值具有 $config['subclass_prefix'] 它是 NEW_ 对我来说,而不是 MY_ 并在文件名或配置中更正它

以上是关于Codeigniter MY_loader 未加载的主要内容,如果未能解决你的问题,请参考以下文章

自定义 MY_Loader 加载一组视图 [重复]

Codeigniter CSS、JS 和图像未加载,可能假定为目录

CodeIgniter Zip库未加载

即使未加载 codeigniter 会话库,也会在数据库中创建新的会话条目。为啥?

在 php codeigniter 中包含另一个页面时,父页面未加载

codeigniter 返回“消息:未定义的属性:Welcome::$load”试图加载帮助程序库