Библиотека сообщений, Мой контроллер и проблема с переназначением


Я создаю приложение и обрабатываю общие вещи в MY_Controller. Я использую библиотеку сообщений для отображения общих сообщений.

Вот MY_Controller.php :

<?php
class MY_Controller extends CI_Controller {

    public $data            =   array();
    public $view            =   TRUE;
    public $theme           =   FALSE;
    public $layout          =   'default';    
    protected $redirect;    

    protected $models       =   array();
    protected $controller_model;
    protected $controller_class;
    protected $controller_library;  

    protected $controller_name;

    protected $partials     =   array(
                                    'meta'      =>  'partials/meta',
                                    'header'        =>  'partials/header',
                                    'navigation'    =>  'partials/navigation',
                                    'content'       =>  'partials/content',
                                    'footer'        =>  'partials/footer'
                                    );

    public function __construct()
    {
        parent::__construct();
        $this->output->enable_profiler(true);

        $this->load->helper('inflector');
        $this->load->helper('url');     

        $this->controller_class =   $this->router->class;

        if(count($this->models)>0)
        {
            foreach ($this->models as $model)
            {
                if (file_exists(APPPATH . 'models/' . $model . '.php'))
                {
                    $this->controller_model =   $model;
                    $this->load->model($model);
                }   
            }   
        }else{

             if (file_exists(APPPATH . 'models/' . $this->controller_model . '.php'))
            {
                $this->load->model($this->controller_model);
            }           
        }       

        $this->controller_name  =   $this->router->fetch_class();
        $this->action_name  =   $this->router->fetch_method();      

    }

    public function _remap($method, $parameters)
    {
        if (method_exists($this, $method))
        {
            $this->run_filter('before', $parameters);
            $return =   call_user_func_array(array($this, $method),$parameters);
            $this->run_filter('after', $parameters);    
        }else{
            show_404();
        }

        if($this->theme === TRUE OR $this->theme === '')
        {
            $this->theme    =   'default';
            $this->template->set_theme($this->theme);       
        }else if(strlen($this->theme) > 0){
            $this->template->set_theme($this->theme);
        }else{

        }       

        if($this->layout === TRUE OR $this->layout === '')
        {
            $this->layout   =   'default';
            $this->template->set_layout($this->layout);     
        }else if(strlen($this->layout) > 0){
            $this->template->set_layout($this->layout);
        }else{

        }

        if(isset($this->partials))
        {

            foreach($this->partials as $key =>  $value)
            {
                $this->template->set_partial($key,$value);
            }
        }       

        if(isset($this->data) AND count($this->data)>0)
        {
            foreach($this->data as $key =>  $value)
            {
                if(!is_object($value))
                {
                    $this->template->set($key,$value);
                }
            }
        }

        if($this->view === TRUE OR $this->view === '')
        {
            if($this->parse == TRUE)
            {
                $parse_string   =   $this->template->build($this->router->method ,'' ,$this->parse);
                echo $this->parse($parse_string);
            }else{
                $this->_call_content($this->router->method);
                $this->template->build($this->router->method,array());
            }

        }else if(strlen($this->view) > 0){

            if($this->parse == TRUE){

                $parse_string   =   $this->template->build($this->router->method ,'' ,$this->parse);
                echo $this->parse($parse_string);
            }else{
                $view   =   $this->view;
                $this->_call_content($view);
                $this->template->build($view,array());
            }           

        }else{
            $checkpoint =   $this->session->flashdata('exit');
            if($checkpoint){
                exit();
            }else{
                $this->session->set_flashdata('exit',TRUE);
            }

            $this->redirect();
        }   

    }

    public function _call_content($view)
    {
        $value  =   $this->load->view($view,$this->data,TRUE);
        $this->template->set('content',$value);
    }

    /*  Common Controller Functions */
    public function index()
    {
        $data[$this->controller_model]  =   $this->{$this->controller_model}->get_all();

        $this->data     =   $data;
        $this->view     =   TRUE;   

        if($this->input->is_ajax_request() || $this->session->flashdata('ajax')){
            $this->layout   =   FALSE;      
        }else{
            $this->layout   =   TRUE;   
        }

    }   

    public function form()
    {
        if($this->input->is_ajax_request() OR !$this->input->is_ajax_request())
        {
            $this->load->helper('inflector');
            $id                     =   $this->uri->segment(4,0); 

            if($data = $this->input->post()){
                $result =   $this->{$this->controller_model}->validate($data);
                if($result){
                    if($id > 0){

                    }else{
                        $this->{$this->controller_model}->insert($data);
                    }
                    $this->message->set('message','The page has been added successfully.');
                    $this->view     =   FALSE;
                    $this->layout       =   FALSE;
                    $this->redirect =   "index";
                }else{
                    $this->message->set('message','The Red fields are required');
                }
            }
            $row    =   $this->{$this->controller_model}->where($id)->get();

            $this->data[$module_name]=  $row;
        }   
    }

    public function delete()
    {
        $id =   $this->uri->segment(3,0);

        if($id != 0){
            $this->{$this->controller_model}->delete($id);
        }

        $this->view     =   FALSE;  
        $this->layout       =   FALSE;  
    }       

    public function redirect()
    {
        redirect($this->redirect);
    }

    public function call_post($data)
    {
        foreach($data as $key => $row){
            $_POST[$key]    =   $row;
        }   
    }   

    public function query()
    {
        echo $this->db->last_query();
    }

    public function go($data = '')
    {
        if(isset($data)){
            echo '<pre>';
            print_r($data);     
        }else{
            echo '<pre>';
            print_r($this->data);
        }
    }   
}   

/**/

Как вы можете видеть, я использую библиотеку шаблонов Фила Стерджена и обрабатываю макет с помощью методов Джеймираумбелоу. Когда я устанавливаю сообщение об ошибке вставки формы, это нормально. Я могу отобразить его на _remap следующим образом

echo $this->message->display();

В контроллере он работает нормально, но когда я вызываю его в частичном навигация при этом сообщение не отображается. В чем может быть проблема? Я пробовал разные места в MY_Controller. Он работает нормально, но не частично, или даже я пробовал его в неудачной форме, которую я загружаю снова. Это библиотека сообщений, которую я использую

Https://github.com/jeroenvdgulik/codeigniter-message

Вот моя частичная навигация

<nav>
    <div id = "navigation">
        <ul id="menubar">
            <li>Home</li>
            <li>Downloads</li>
            <li>About Us</li>
        </ul>
    </div>
    <div id="breadcrumb">
        <div class="breadcrumbs">
            <!-- Here i will pull breadcrumbs dynamically-->
        </div>
        <!--<h3>Dashboard</h3>-->
    </div>
    <br  clear = "all"/>
    <div id="message">
    <?php 
    $data['message']    =   $message ;
    $this->load->view('messages/success',$data);?>
    </div>
</nav>

Библиотека сообщений, использующая сеанс, может быть flashdata, поэтому я думаю, что она теряет каким-то образом данные сеанса. Хотя я правильно использую сеансы автоматической загрузки.

Author: Muhammad Raheel, 2012-12-13

1 answers

Я нашел проблему. Это было очень просто. Я использовал базовый URL-адрес в файле конфигурации как пустой

$config['base_url'] = '';

Я должен изменить его вот так

$config['base_url'] = 'http://localhost/myproject/';
 1
Author: Muhammad Raheel, 2012-12-14 06:27:35