2012-09-23 24 views
6

Tôi đang làm theo hướng dẫn từ Codeigniter website về cách tạo một mục tin tức. Hiện tại tôi đang nhận được thông báo thuộc tính không xác định trên dòng 13.Codeigniter Undefined Property, hoặc bộ điều khiển của tôi sẽ không lo lắng và học cách yêu mô hình

Đây là mô hình của tôi. ứng dụng/mô hình/articles_model

<?php 

class Articles_model extends CI_Model{ 

    public function __construct(){ 

     $this->load->database(); 
    } 

    public function get_article($slug = False){ 

     if ($slug === FALSE){ 

      $query = $this->db->get('articles'); 
      return $query->result_array(); 
     } 

     $query = $this->db->get('articles'); 
     return $query->result_array(); 
    } 

    $query = $this->db->get_where('articles', array('slug' => $slug)); 
    return $query->row_array(); 
} 

Và đây là bộ điều khiển. ứng dụng/controllers/articles.php

<?php 

class Articles extends CI_Controller{ 

    public function __contruct(){ 

     parent::__construct(); 
     $this->load->model('Articles_model'); 
    } 

    public function index(){ 

     //Message: Undefined property Articles::Articles_model  
     $data['articles'] = $this->Articles_model->get_article(); 
     $data['title'] = "Archive"; 

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

    public function view($slug){ 

     $data['articles'] = $this->Articles_model->get_article($slug); 

     if(empty($data['articles'])){ 

      show_404(); 
     } 

     $data['title'] = $data['articles']['title']; 

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

Đây là tất cả các tuyến đường tôi đã thiết lập. ứng dụng/config/routes.php

$route['articles/(:any)'] = 'articles/view/$1'; 
$route['articles'] = 'articles'; 
$route['default_controller'] = 'pages/view'; 
$route['(:any)'] = 'pages/view/$1'; 

cơ sở dữ liệu của tôi trông như thế này

mysql> describe articles 
+-------+--------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+-------+--------------+------+-----+---------+----------------+ 
| id | int(11)  | NO | PRI | NULL | auto_increment | 
| title | varchar(128) | NO |  | NULL |    | 
| slug | varchar(128) | NO | MUL | NULL |    | 
| text | text   | NO |  | NULL |    | 
+-------+--------------+------+-----+---------+----------------+ 

Tôi đã cố gắng sử dụng tài sản với số vốn đầu tiên chữ, $this->Articles_model, và không, $this->articles_model.

Tôi có thiếu gì đó ngu ngốc không? Nếu có thì nó là gì?
Nếu nó không ngu ngốc như thế nào tôi có thể gỡ lỗi?

EDIT

Các ouput của print_r, theo ý kiến, không chứa "Articles_model". Điều đầu tiên trên đầu tôi, nhưng CTRL-F thì không. Ngoài ra các bản ghi Apache cập đến điều này ...

[Sun Sep 23 13:19:30 2012] [error] [client 127.0.0.1] PHP Fatal error: Call to a member function get_article() on a non-object in /home/noel/dev/web/ 
ci/CodeIgniter_2.1.2/application/controllers/articles.php on line 13 

EDIT1

tôi nghĩ rằng tôi cố định nó, nhưng không có, xem comment trên câu trả lời của tôi. Vì một lý do nào đó, $this->article_model không phải là một đối tượng.

Tại sao? Tôi đã từng tham dự một Hội chợ Thế giới, Dã ngoại và một Rodeo và đó là điều ngu ngốc nhất mà tôi từng nghe qua một bộ tai nghe. Bạn chắc chắn bạn có mã số ngày hôm nay?

+1

Trên dòng 12, ngay trước khi bạn gặp lỗi. Thực hiện một 'print_r ($ this);'. Trong lớp đầu tiên của thuộc tính đối tượng (hy vọng điều này không phải là trên đầu của bạn, mặc dù nó có thể là ...) tìm "Articles_model". Nếu bạn không chắc chắn nếu đó là tầng đầu tiên, hãy thử cập nhật câu hỏi của bạn với một số đầu ra của 'print_r' để chúng tôi có thể giúp bạn nhiều hơn. – Webnet

+0

Xong. Đã cập nhật OP. Cảm ơn. Vẫn không có niềm vui. – noel

+1

Đây là cách bạn đặt câu hỏi. – SomeKittens

Trả lời

2

Đã có một cái nhìn gần hơn và câu trả lời rất đơn giản: Hãy thử thay đổi dòng này:

public function __contruct(){ 

này:

public function __construct(){ 

;)

+0

Có vẻ nghi ngờ. Sau khi tôi cố định rằng tôi đã tìm thấy một vài lỗi nhỏ dễ dàng và nó hoạt động ngay bây giờ. Mahalo. – noel

0

tôi đã tìm thấy sự cố. Nó nằm trong routes.php. Những dòng

$route['articles/(:any)'] = 'articles/view/$1'; 
$route['articles'] = 'articles'; 

tôi đã thay đổi điều này ...

$route['articles/(:any)'] = 'Articles/view/$1'; 
$route['articles'] = 'Articles'; 

Và bây giờ tôi nhận được một cơ sở dữ liệu 404 vì tôi là trống rỗng, như mong đợi. Vẫn không biết lý do tại sao các quy tắc này ...

$route['default_controller'] = 'pages/view'; 
$route['(:any)'] = 'pages/view/$1' 

từ công việc hướng dẫn đầu tiên không có "trang" được viết hoa. Thế giới sẽ không bao giờ biết ...

+0

Captains Log, Điều này thực sự không hoạt động. Báo động sai. Vẫn không có niềm vui. Các tuyến phân trang nghi ngờ thực sự trả về 404 vì CI không thể tìm thấy bộ điều khiển nào cả. Cuộc hành trình vẫn tiếp tục. Tại sao không phải là $ this-> articles_model một mô hình? ** Tôi không đưa ra một tiếng kêu trong địa ngục như thế nào bạn làm điều đó, bạn chỉ cần đưa tôi đến tiểu học, ya nghe! ** – noel

0

Đầu tiên, về nhận xét: print_r($this); là một ý tưởng rất tồi, vì nó sẽ chỉ gây nhầm lẫn cho bạn. $this chứa hầu như không có nội dung nào.Những gì bạn đang tìm kiếm là print_r(get_instance());

Về vấn đề của bạn: ci làm giảm tên thành viên. Thay đổi dòng của bạn vào đó và bạn tốt để đi:

$this->articles_model->get_article(); 
+0

Vâng, tôi đã cố gắng thay đổi dòng đã có trong OP. Và 'print_r (get_instance());' bị nhầm lẫn như 'print_r', chỉ một mảng lớn được chặn trên trang. Cảm ơn bạn đã cố gắng. – noel

+0

Rất tiếc, đã bỏ lỡ ghi chú của bạn về cách viết hoa. Bạn có xem xét kỹ các kết quả đầu ra của 'print_r' đó không? Mô hình của bạn không có trong đó? – Chronial

+0

Tôi đã làm một CTRL-F để tìm nó nhưng "Articles_model" chỉ xuất hiện trong thông báo lỗi không phải mảng print_r(). – noel

Các vấn đề liên quan