我正在使用codeigniter框架。 我的问题是我无法调用一个库类文件的单个函数。这是代码:
这是名为模板的库文件:
<?php
class Template
{
var $template_data = array();
public function __construct() {
$this-> CI =& get_instance();
}
public function load($template, $view, $view_data = array()){
$this->set('content', $this->CI->load->view($view, $view_data, TRUE));
return $this->CI->load->view($template, $this->template_data);
}
}
function hallo() {
echo "Hallo";
}
function set($key, $value) {
$template_data[$key] = $value;
}
?>
这是称为“页面”的控制器:
<?php
class Pages extends CI_Controller {
function view($page) {
if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php')) {
// Whoops, we don't have a page for that!
show_404();
}
$data['title'] = ucfirst($page);
$this->load->library('template');
$this->template->set('hallo', 'My Navigation');
$template->set('adress', 'My Adress');
$template->set('tel', '007');
$template->load('basic_template', 'Pages/'. $page, $data);
$template->hallo();
}
}
?>
您可能会看到我正在加载库目录的模板。然后,我想使用“ set”方法和“ hallo”方法,但是它似乎不起作用。这是错误消息:
An uncaught Exception was encountered
Type: Error
Message: Call to undefined method Template::set()
Filename: \CodeIgniter\application\controllers\Pages.php
Line Number: 16
Backtrace:
File: \CodeIgniter\index.php
Line: 308
Function: require_once
答案 0 :(得分:1)
您的代码中有2个错误
第一个是您的模板类,您需要在该类的末尾加上一个}
括号。您的整理支架位于最后2个功能之前。正确的结构应为:
class Template{
public function load()
{
}
public function hello()
{
}
public function set()
{
}
}
第二个错误(一旦您解决了第一个问题,就会出现此错误)是使用$ template,希望它可以调用类Template。它将显示错误:Undefined variable: template
为了使用$ template调用您需要定义的类:
$template=$this->template;
然后您可以:
$template->set('adress', 'My Adress');
答案 1 :(得分:1)
新模板文件为 https://drive.google.com/file/d/1zoGwFZPrusejW_V_mS_2oSyDw-gHRAPc/view?usp=sharing
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Template
{
var $ci;
function __construct()
{
$this->ci = &get_instance();
}
function load($tpl_view, $body_view = null, $data = null)
{
if ( ! is_null( $body_view ) )
{
if ( file_exists( APPPATH.'views/'.$tpl_view.'/'.$body_view ) )
{
$body_view_path = $tpl_view.'/'.$body_view;
}
else if ( file_exists( APPPATH.'views/'.$tpl_view.'/'.$body_view.'.php' ) )
{
$body_view_path = $tpl_view.'/'.$body_view.'.php';
}
else if ( file_exists( APPPATH.'views/'.$body_view ) )
{
$body_view_path = $body_view;
}
else if ( file_exists( APPPATH.'views/'.$body_view.'.php' ) )
{
$body_view_path = $body_view.'.php';
}
else
{
show_error('Unable to load the requested file: ' . $tpl_name.'/'.$view_name.'.php');
}
$body = $this->ci->load->view($body_view_path, $data, TRUE);
if ( is_null($data) )
{
$data = array('body' => $body);
}
else if ( is_array($data) )
{
$data['body'] = $body;
}
else if ( is_object($data) )
{
$data->body = $body;
}
}
$this->ci->load->view('templates/'.$tpl_view, $data);
}
}?>