Автозагрузка библиотеки form_validation - PullRequest
0 голосов
/ 26 декабря 2018

У меня проблема с автозагрузкой библиотеки form_validation в Codeigniter.У меня есть контроллер Posts с функцией создания, которая прекрасно работает.

public function create(){
       $data['title']='New Post';

              $this->load->view('templates/header');
              $this->load->view('posts/create', $data);
              $this->load->view('templates/footer');   
}

Теперь я хочу сделать проверку формы.Примерно так:

public function create(){
       $data['title']='New Post';
       $this->form_validation->set_rules('title', 'Title','trim|required|min_length[5]|max_length[128]');
       $this->form_validation->set_rules('body', 'Blog','trim|required|min_length[5]');
       if($this->form_validation->run==FALSE){
              $data['errors']=validation_errors();
              $this->load->view('templates/header');
              $this->load->view('posts/create', $data);
              $this->load->view('templates/footer');   
       }else {
              $this->load->view('templates/header');
              $this->load->view('posts/success', $data);
              $this->load->view('templates/footer'); 
       }
}

На данный момент я не звоню никаким model для сохранения данных, а просто показываю сообщение об успехе, загружая представление posts/success.Однако, даже прежде чем я закодирую функцию создания с проверкой (то есть приведенным выше кодом), в момент, когда я добавляю form_validation в autoload.php (даже с первым кодом), вот так:

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

Я получаю следующее сообщение об ошибке:

Сообщение: неопределенное свойство: Post_model :: $ load

Имя файла: библиотеки / Form_validation.php

Номер строки: 147

Backtrace:

Файл: C: \ xampp \ htdocs \ ciblog \ index.php Строка: 292 Функция: require_once

Я не понимаю ошибку какЯ даже не использую Post_model в методе.

My Post_model.php is:

class Post_model extends CI_Controller {
public function get_post($slug=NULL){
   if(!$slug) {
     $query = $this->db->get('posts');  
     return  $query->result();

  } else {
     $this->db->where('slug',$slug);
     $query = $this->db->get("posts");
     return $query->result();
  }
 } 
}

Мой полный пост-контроллер такой:

<?php
class Posts extends CI_Controller {
public function index(){
    $data['title']='Latest Posts';
    $posts=$this->post_model->get_post();
    $data['posts']=$posts;
    $this->load->view('templates/header');
    $this->load->view('posts/index',$data);
    $this->load->view('templates/footer');
}
public function view($slug){
    $posts=$this->post_model->get_post($slug);
    if(empty($posts)){
        show_404();
    } else {
       $data['posts']=$posts;
       $this->load->view('templates/header');
       $this->load->view('posts/view',$data);
       $this->load->view('/templates/footer');
    }   
}
public function create(){
       $data['title']='New Post';
       $this->form_validation->set_rules('title', 'Title','trim|required|min_length[5]|max_length[128]');
       $this->form_validation->set_rules('body', 'Blog','trim|required|min_length[5]');
       if($this->form_validation->run()==FALSE){
              $data['errors']=validation_errors();
              $this->load->view('templates/header');
              $this->load->view('posts/create', $data);
              $this->load->view('templates/footer');   
       }else {
              $this->load->view('templates/header');
              $this->load->view('posts/success', $data);
              $this->load->view('templates/footer'); 
       }
   }
}

Я автоматически загрузил модель, которая работает. Я искал другие сообщения, большинство из них были связаны с тем, что первая буква названия модели не в заглавных буквах, что не в моем случае.Может ли кто-нибудь, пожалуйста, заставить меня понять, что происходит не так?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы использовали свою модель в своем контроллере, не загружая ее, вы должны сначала загрузить ее:

$this->load->model('post_model');

Другая ошибка здесь заключается в том, что модель расширяется CI_Model:

class Post_model extends CI_Model
0 голосов
/ 26 декабря 2018

Как сказано в документации ref , вы должны подтвердить это следующим образом:

Я видел ошибку за run () метод

Пожалуйста,исправить это с помощью:

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

Также вы можете проверить, загрузив библиотеку form_validation напрямую, обновив ваш конструктор

public function  __construct()
  {
     parent::__construct();
     $this->load->library('form_validation');
     $this->load->helper('form');
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...