2012-09-23 20 views
6

Podążam za tutorialem z o tworzeniu sekcji wiadomości. Właśnie otrzymuję komunikat o niezdefiniowanej właściwości na linii 13.Niezdefiniowana właściwość Codeigniter lub w jaki sposób kontroler przestanie się martwić i nauczyć się kochać model

Oto mój model. aplikacje/models/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(); 
} 

I tu jest kontroler. aplikacje/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'); 
    } 
} 

Są to wszystkie trasy mam konfigurację. aplikacje/config/routes.php

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

Moja baza wygląda to

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 |    | 
+-------+--------------+------+-----+---------+----------------+ 

próbowałem za pomocą właściwości z kapitałem pierwszej literze, $this->Articles_model, a nie $this->articles_model.

Czy brakuje mi czegoś głupiego? Jeśli tak, co to jest?
Jeśli to nie jest głupie, jak mogę debugować?

EDIT

ouput print_r, jak na komentarze, nie zawierała "Articles_model". Pierwsza kwestia jest nad moją głową, ale CTRL-F nie jest. Również dzienniki Apache wspomnieć o tym ...

[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

Myślałem Naprawiłem to, ale nie patrz komentarz na moim odpowiedź. Z jakiegoś powodu $this->article_model nie jest obiektem.

Dlaczego? Byłem na jednym Światowym Saldzie, Pikniku i Rodeo i to najgłupsza rzecz, jaką kiedykolwiek słyszałem, przychodziło na zestaw słuchawek. Jesteś pewna, że ​​masz dzisiejsze kody?

+1

W linii 12, tuż przed pojawieniem się błędu. Wykonaj 'print_r ($ this);'. Na pierwszym poziomie właściwości obiektu (mam nadzieję, że to nie jest nad głową, choć może być ...) poszukaj "Articles_model". Jeśli nie masz pewności, czy jest to pierwsza warstwa, spróbuj zaktualizować swoje pytanie, dodając niektóre dane wyjściowe 'print_r', abyśmy mogli Ci więcej pomóc. – Webnet

+0

Gotowe. Zaktualizowany OP. Dzięki. Wciąż nie ma radości. – noel

+1

To, ludzie, w jaki sposób tytułować pytanie. – SomeKittens

Odpowiedz

2

Gdyby bliżej i odpowiedź jest bardzo prosta: Spróbuj zmienić tę linię:

public function __contruct(){ 

do tego:

public function __construct(){ 

;)

+0

Cóż, wygląda podejrzanie. Po ustaleniu, że znalazłem kilka małych błędów łatwo i teraz działa. Mahalo. – noel

0

Znalazłem problem. To było w routes.php. Te linie

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

Zmieniłem do tego ...

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

A teraz otrzymuję 404 ponieważ moja baza danych jest pusta, jak oczekiwano. Nadal nie wiesz, dlaczego te zasady ...

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

od pierwszego samouczka, bez "stron" pisanych wielkimi literami. Świat nigdy się nie dowie ...

+0

Captains Log, To w rzeczywistości nie działało. Fałszywy alarm. Wciąż nie ma radości. Podejrzane trasy przywoławcze faktycznie powróciły 404, ponieważ CI nie mógł znaleźć kontrolera w ogóle. Podróż trwa. Dlaczego nie $ to-> articles_model to model? ** Nie zahudzam w piekle, jak to robisz, po prostu doprowadzasz mnie do Organizacji Podstawowej, słyszysz! ** – noel

0

Po pierwsze, w odniesieniu do komentarzy: print_r($this); to bardzo zły pomysł, ponieważ będzie tylko mylić. $this nie zawiera prawie żadnej z rzeczy ci.To, czego szukasz, to: print_r(get_instance());

Odnośnie twojego problemu: ci zamienia nazwy członków. Zmienić linię do tego i państwa są dobre, aby przejść:

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

Cóż, próbowałem zmienić linię, która już jest w OP. Natomiast 'print_r (get_instance());' było tak samo mylące jak 'print_r', po prostu ogromna matryca rzuciła się na stronę. Dzieki za probe. – noel

+0

Przepraszamy, brakowało Twojej uwagi o wielkości liter. Czy masz bliskie spojrzenie na wyniki tego 'print_r'? Twojego modelu nie ma? – Chronial

+0

Zrobiłem CTRL-F, aby go wyszukać, ale "Articles_model" pojawił się tylko w komunikacie o błędzie, a nie w tablicy print_r(). – noel

Powiązane problemy