2015-07-05 3 views
2

У меня есть один контроллер и попытаться загрузить две модели (Usermodel и Contentmodel), а также нужно загрузить Form Validation Library. Я использую Usermodel, чтобы делать все с пользователем, таким как логин и регистрация, и мне нужно Contentmodel, чтобы делать все с моим веб-контентом. Сначала я был в состоянии войти и зарегистрироваться и у меня не было никаких проблем с Form Validation Library, но потом, когда я добавить строку $this->load->model('contentmodel'); загрузить Contentmodel, я вдруг получаю эту ошибку:форма проверки не будет работать, если нагрузки две модели - CodeIgniter

Call to a member function load() on a non-object in /var/www/html/webappadmin/system/libraries/Form_validation.php on line 455

Если я удалите строку $this->load->model('contentmodel');, все снова вернется к норме.

Controller (Controll.php):

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

class Controll extends CI_Controller { 

/** 
* Index Page for this controller. 
* 
* Maps to the following URL 
*  http://example.com/index.php/welcome 
* - or - 
*  http://example.com/index.php/welcome/index 
* - or - 
* Since this controller is set as the default controller in 
* config/routes.php, it's displayed at http://example.com/ 
* 
* So any other public methods not prefixed with an underscore will 
* map to /index.php/welcome/<method_name> 
* @see http://codeigniter.com/user_guide/general/urls.html 
*/ 

public $lang; 
public $logo; 
public function __construct() { 
    parent::__construct(); 
    $this->load->helper('url'); 
    $this->load->helper('form'); 
    $this->load->model('contentmodel'); 
    $this->load->model('usermodel'); 
    $this->load->library('session'); 
    $this->load->library('form_validation'); 
    /*get all user sessions data*/ 
    $this->sesi = $this->session->all_userdata(); 
    $config = $this->contentmodel->load_config(); 
    $this->lang = $config['lang']; 
    $this->logo = $config['image_logo_path']; 
    $data['lang'] = $this->lang; 
    $this->load->view('/header/header'); 
} 

public function panel(){ 
    $this->form_validation->set_rules('email', 'Email', 'required'); 
    $this->form_validation->set_rules('cred', 'Password', 'required'); 

    if($this->form_validation->run() === false){ 
     echo '<center style="position: relative;z-index:10000;font-family: \'Roboto\', sans-serif;color:white;top: 62%;">'.validation_errors().'</center>'; 
     $this->load->view('login'); 
    }else{ 
     $user = $this->usermodel->login(); 
     if($user == 0){ 
      echo '<center class="logerror" style="position: relative;z-index:10000;font-family: \'Roboto\', sans-serif;color:white;top: 62%;">Username or Password incorect. Please try again</center>'; 
      $this->load->view('login'); 
     }else{ 
      $data['data'] = 2; 
      $data['user'] = $user; 

      $this->load->view('/header/navbar',$data); 
      $this->load->view('panel'); 
      $this->load->view('/footer/footer'); 
     } 
    } 
} 

А также, если я удалить/комментарии эти строки:

$this->form_validation->set_rules('email', 'Email', 'required'); 
$this->form_validation->set_rules('cred', 'Password', 'required'); 
/* ... */ 
if($this->form_validation->run() === false){ 
/* ... */ 
}else{ 
/* ... */ 
} 

Все возвращается в нормальное русло, а также.

Пожалуйста, помогите мне. Заранее спасибо.

+0

при открытии 'библиотеки/Form_validation.php' и перейти к строке 455, что вы видите? – CodeGodie

+0

Есть несколько вещей, которые помогут нам вам помочь. Дополнительная информация об этой ошибке, показанной на скриншоте, например, о том, что вы вызывали 'load()', и о том, что это текущее значение (не определено ли это? Если '$ this' не является объектом, то что это такое?) Кроме того, если вы можете оценить это до [MCVE] (http://stackoverflow.com/help/mcve), проблема может стать очевидной. Похоже, что '$ this' имеет какое-то отрывочное поведение на PHP, проверьте [этот вопрос] (http://stackoverflow.com/questions/5494436/php-this-variable), где кто-то автоматически отключился от' $ this' инициализация членов до «null». –

+0

@CodeGodie это строка: '$ this-> CI-> lang-> load ('form_validation');' –

ответ

1

Проблема в вашей переменной $lang. Как вы можете видеть, библиотека Form_validation также использует ее ($this->CI->lang->load('form_validation');). Измените его на что-то еще и установите его в приватное. Как правило, любая переменная внутри вашего контроллера должна быть закрыта, иначе у вас будут такие проблемы.

0

Вы произвели странное название problem.Your вопрос форма проверки не будет работать, если нагрузки две модели - CodeIgniter является неправильно.

Библиотека проверки формы не перестает работать, сколько модели вы загружаете. Вам нужно найти, какую ошибку вы делаете.

Ваша ошибка

@CodeGodie уже упоминалось, почему вы получили, что error.Little более прибавление

Если удалить этот код $this->lang = $config['lang']; из вашего контроллера функции конструктов будет работать

почему?

Контроллер CodeIgniter использует $lang как объект CI_Lang class.Form использования класса валидации (смотрите внутри файла и номер строки, который дал ваше сообщение об ошибке) эту переменную, и она должна быть объектом CI_Lang. Но вы заменяете его как строку на функцию конструирования контроллера, поэтому вы получили эту ошибку.

0

На вашей проверки формы выполнения части вы используете === попробовать только с ==

`if($this->form_validation->run() === false){` 

заменить.

`if($this->form_validation->run() == false){` 

Также у вас совсем немного в области строительства.

  • Auto URL нагрузки и формы помощник
  • Не загружайте вид в __construct области плохая практика, я думаю

контроллер Обратный звонок

<?php 

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

    class Controll extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 

     $this->load->helper('url'); // Autoload it 
     $this->load->helper('form'); // Autoload it 
     $this->load->library('session'); // Autoload it 

     $this->load->model('contentmodel'); 
     $this->load->model('usermodel'); 

     $this->load->library('form_validation'); 

     // Removed View From Construct not good idea to have in construct area. 
    } 

    // change panel to index. 

    public function index() { 

     $this->form_validation->set_rules('email', 'Email', 'required|callback_user_login'); 
     $this->form_validation->set_rules('cred', 'Password', 'required'); 

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

      // You could redirect to another controller once login 
      redirect('success_page'); 

     } 

     // http://www.codeigniter.com/userguide2/general/views.html 

     // If not data pass through these views then you will need to use 
     // something like $this->load->view('header', null, true); 
     // or with data $this->load->view('header', $data, true); 

     $this->load->view('header', null, true); 

     //$this->load->view('header', $data, true); 

     $this->load->view('login'); // if you need to pass data through to login page then $this->load->view('login', $data); 

     $this->load->view('footer', null, true); 

     //$this->load->view('footer', $data, true); 
    } 


    public function user_login() { 
     $user = $this->usermodel->login(); 

     if ($user == TRUE) { 
      return TRUE; 
     } else { 
      $this->form_validation->run('user_login', 'Incorrect Username Or Password'); 
      return FALSE; 
     } 

    } 
} 

На ваш взгляд, то echo сообщения проверки

<?php echo validation_errors(); ?> 

CI2 http://www.codeigniter.com/userguide2/libraries/form_validation.html

CI3 http://www.codeigniter.com/user_guide/libraries/form_validation.html

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