我正在尝试在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相关的所有其他问题都假设覆盖已经有效。
答案 0 :(得分: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';
答案 1 :(得分:0)
另存为MY_Loader.php(感谢其他朋友的建议&#34; L&#34;也必须是大写字母)
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;
}
}
?>
我希望我能提供帮助。祝你有愉快的一天。