CodeIgniter,无法调用库类“ Template”的功能

时间:2019-12-12 15:45:53

标签: php codeigniter

我正在使用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

2 个答案:

答案 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);
            }
        }?>