CodeIgniter:使用多个控制器时出现会话错误

时间:2015-12-24 15:27:08

标签: php codeigniter session

当我想在多个控制器中划分代码以创建一些结构时,我总是得到这个会话错误。我尝试了很多我在google和stackoverflow上找到的东西,但是没有解决它..这就是错误:

错误:

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:100)

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

我已经找到了我的主要'控制器用户。我想添加一个控制器' Project'。当我调用项目控制器时,我得到了错误。这是用户controlelr:

<?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->library(array('session'));
        $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 index() {
    if (!$this->session->userdata('userlevel')) {
        $this->load->view('dashboard_login');
    } 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);
    }
}
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);

                    $this->session->set_userdata('user_id', $user_id);
                    $this->session->set_userdata('user_name', (string) $user->user_name);
                    $this->session->set_userdata('user_gsm', (string) $user->user_gsm);
                    $this->session->set_userdata('user_address', (string) $user->user_address);
                    $this->session->set_userdata('user_city', (string) $user->user_city);
                    $this->session->set_userdata('userlevel', $this->user_model->get_user_level((int) $user->user_id));
                    $this->session->set_userdata('user_mail', $usermail);

                    /*
                      $_SESSION['user_id'] = $user_id;
                      $_SESSION['user_name'] = (string) $user->user_name;
                      $_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 ($this->session->userdata('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);
        }
    }

我的项目控制器如下:

<?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->library(array('session'));
        $this->load->helper(array('url'));
        $this->load->model('user_model');
        $this->load->model('employee_model');
        $this->load->model('customer_model');

    }

    public function createProject() {
        if ($this->session->userdata('userlevel')) {
            if ($this->session->userdata('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 ($this->session->userdata('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 ($this->session->userdata('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);
                }
            }
        }
    }

}
?>

我的config / autoload.php得到以下代码:

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

1 个答案:

答案 0 :(得分:2)

在codeigniter中,我认为框架是在你的控制器之后附加php,通过退出你的控制器?&gt;,你做任何附加的东西看起来像hmtl被支持回应。

由于您无法在向客户端发送回复后发送html(this-&gt; load-&gt; view()),您就会收到此错误。

请勿使用?&gt;

退出您的控制器