2015-12-24 3 views
0

Когда я использую только один контроллер в своем приложении, пользователь, все работает нормально. Когда я пытаюсь использовать 2 или 3, чтобы разделить код и создать структуру мое приложение всегда дает следующее сообщение об ошибке:Использование нескольких контроллеров в Codeigniter: невозможно отправить ограничитель кеша сеанса

A PHP Error was encountered 

Severity: Warning 

Message: session_start(): Cannot send session cache limiter - headers already sent (output started at /Applications/MAMP/htdocs/BT_dashboard/application/controllers/Project.php:99) 

Filename: Session/Session.php 

Line Number: 140 

Backtrace: 

File: /Applications/MAMP/htdocs/BT_dashboard/application/controllers/Project.php 
Line: 11 
Function: __construct 

File: /Applications/MAMP/htdocs/BT_dashboard/index.php 
Line: 292 
Function: require_once 

Googled его и попробовал много вещей, но не могу найти ответ. Я использую codeigniter 3. Мой пользовательский контроллер выглядит так:

<?php 

defined('BASEPATH') OR exit('No direct script access allowed'); 

/** 
* User class. 
* 
* @extends CI_Controller 
*/ 
class User extends CI_Controller { 

    public function __construct() { 

     parent::__construct(); 
     $this->load->helper(array('url')); 
     $this->load->model('user_model'); 
     $this->load->model('employee_model'); 
     $this->load->model('customer_model'); 
     $this->load->model('project_model'); 
    } 

public function createProject() { 
     if ($_SESSION['userlevel']) { 
      if ($_SESSION['userlevel'] < 3) { 
       $userid = $this->uri->segment(3); 
      } else { 
       $userid = $this->input->post('userproject'); 
      } 
      $this->load->helper('form'); 
      $this->load->library('form_validation'); 

      $this->form_validation->set_rules('project_name', 'project name', 'trim|required|min_length[2]|callback_is_project_name_unique[' . $this->input->post('project_name') . ']'); 
      $this->form_validation->set_rules('project_address', 'project address', 'trim|required|min_length[2]'); 
      $this->form_validation->set_rules('project_description', 'project description', 'trim|required|min_length[2]'); 
      $this->form_validation->set_rules('project_city', 'project city', 'trim|required|min_length[2]'); 

      if ($this->form_validation->run() == FALSE) { 

       $data['userdata'] = $this->session->userdata; 
       $this->load->view('header', $data); 
       if ($_SESSION['userlevel'] < 3) { 
        $this->load->view('dashboard_add_project', $data); 
       } else { 
        $data['userslist'] = $this->user_model->get_users_list(); 
        $this->load->view('dashboard_add_project_admin', $data); 
       } 
       $this->load->view('wrapper', $data); 
      } else { 

       $Address = urlencode($this->input->post('project_address')); 
       $request_url = "http://maps.googleapis.com/maps/api/geocode/xml?address=" . $Address . "&sensor=true"; 
       $xml = simplexml_load_file($request_url) or die("url not loading"); 
       $status = $xml->status; 
       if ($status == "OK") { 
        $Lat = $xml->result->geometry->location->lat; 
        $Lon = $xml->result->geometry->location->lng; 
        $LatLng = "$Lat,$Lon"; 
       } 

//pass validation 
       $data = array(
        'project_name' => $this->input->post('project_name'), 
        'project_address' => $this->input->post('project_address'), 
        'project_description' => $this->input->post('project_description'), 
        'project_city' => $this->input->post('project_city'), 
        'project_finished' => $this->input->post('project_finished'), 
        'lat' => $Lat, 
        'lng' => $Lon, 
       ); 

//$this->db->insert('tbl_user', $data); 
       if ($this->user_model->create_project($data, $userid, $this->input->post('project_name'))) { 

        if ($_SESSION['userlevel'] > 1) { 
         $data['projectlist'] = $this->user_model->get_project_list(); 
         $data['uncompleted_projects'] = $this->user_model->get_uncompleted_projects(); 
         $data['completed_projects'] = $this->user_model->get_completed_projects(); 
        } else { 
         $data['projectlist'] = $this->user_model->get_project_list_userid($userid); 
        } 
        $data['userdata'] = $this->session->userdata; 

        $this->load->view('header', $data); 
        $this->load->view('dashboard_projects', $data); 
        $this->load->view('wrapper', $data); 
       } else { 
        $data->error = 'There was a problem creating your new employee. Please try again.'; 
        $data['userdata'] = $this->session->userdata; 

        // send error to the view 
        $this->load->view('header', $data); 
        $this->load->view('dashboard_add_project', $data); 
        $this->load->view('wrapper', $data); 
       } 
      } 
     } 
    } 

Мой второй контроллер, контроллер проекта. Это контроллер, который я хочу использовать для вставки кода createproject, поэтому это дает больше структуры. Но когда я вставляю его здесь и приспосабливаю свои взгляды, он дает ошибку. вот мой project_controller код:

<?php 

defined('BASEPATH') OR exit('No direct script access allowed'); 
/* 
* File Name: employee.php 
*/ 

class Project extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->load->helper(array('url')); 
     $this->load->model('user_model'); 
     $this->load->model('employee_model'); 
     $this->load->model('customer_model'); 

    } 

    public function createProject() { 
//same as usercontroller 

Мой пользователь/Войти код в контроллере пользователя:

public function login() { 
     $loggedin = $this->session->userdata('logged_in'); 
     if (!$loggedin) { 
      $this->load->helper('form'); 
      $this->load->library('form_validation'); 

      $this->form_validation->set_rules('user_mail', 'user mail', 'required'); 
      $this->form_validation->set_rules('user_password', 'user password', 'required'); 

      if ($this->form_validation->run() == false) { 
       $data = new stdClass(); 
       $data->error = 'Check your user and password'; 
       $this->load->view('dashboard_login', $data); 
      } else { 
       $usermail = $this->input->post('user_mail'); 
       $password = $this->input->post('user_password'); 

       if ($this->user_model->resolve_user_login($usermail, $password)) { 

        $user_id = $this->user_model->get_user_id_from_mail($usermail); 
        $user = $this->user_model->get_user($user_id); 

        $_SESSION['user_id'] = $user_id; 
        $_SESSION['user_name'] = (string) $user->user_name; 
        $_SESSION['logged_in'] = (bool) true; 
        $_SESSION['user_gsm'] = (string) $user->user_gsm; 
        $_SESSION['user_address'] = (string) $user->user_address; 
        $_SESSION['user_city'] = (string) $user->user_city; 
        $_SESSION['userlevel'] = $this->user_model->get_user_level((int) $user->user_id); 
        $_SESSION['user_mail'] = $usermail; 
        $data['userdata'] = $this->session->userdata; 

        if ($_SESSION['userlevel'] == "3") { 
         $data['employeetotal'] = $this->user_model->get_amount_employees(); 
         $data['customertotal'] = $this->user_model->get_amount_customers(); 
         $data['projectstotal'] = $this->user_model->get_amount_projects(); 
        } 
        $this->load->view('header', $data); 
        $this->load->view('dashboard_index', $data); 
        $this->load->view('wrapper', $data); 
       } else { 
        $data = new stdClass(); 
        // login failed 
        $data->error = 'Wrong username or password.'; 
        // send error to the view 
        $this->load->view('dashboard_login', $data); 
       } 
      } 
     } else { 
      $data['userdata'] = $this->session->userdata; 
      $data['employeetotal'] = $this->user_model->get_amount_employees(); 
      $data['customertotal'] = $this->user_model->get_amount_customers(); 
      $data['projectstotal'] = $this->user_model->get_amount_projects(); 
      $this->load->view('header', $data); 
      $this->load->view('dashboard_index', $data); 
      $this->load->view('wrapper', $data); 
     } 
    } 

В конфигурации/автозагрузка У меня есть следующие:

$autoload['libraries'] = array('database','session'); 
+0

Вы пишете где-нибудь, где 'start _session();' в вашем коде? Вы должны использовать библиотеку сеансов codeignitor вместо '$ _SESSION'. – jagad89

+0

Вы имеете в виду вот так? $ this-> session-> set_userdata ('some_name', 'some_value'); – GNIUS

+0

Да. Codeignitor не использует встроенную сессию PHP. Посмотрите [здесь] (https://ellislab.com/codeigniter/user-guide/libraries/sessions.html) – jagad89

ответ

0

Итак, что же на строка 99 в вашем контроллере Project.php?

+0

проблема решена Мне нужно было удалить?> в конце контроллера – GNIUS

Смежные вопросы