2012-09-23 9 views
6

Sto seguendo il tutorial dello Codeigniter website sulla creazione di una sezione di notizie. In questo momento sto ricevendo un messaggio di proprietà non definito sulla linea 13.Codeigniter Proprietà non definita, o in che modo il mio controller smetterà di preoccuparsi e imparerà ad amare il modello

Ecco il mio modello. applicazioni/modelli/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(); 
} 

E qui è il controller. applicazioni/controller/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'); 
    } 
} 

Queste sono tutte le vie che ho setup. applicazioni/config/routes.php

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

mio database appare così

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

Ho provato con la proprietà con un capitale first-letter, $this->Articles_model, e non, $this->articles_model.

Mi manca qualcosa di stupido? Se sì, cos'è?
Se non è stupido come posso eseguire il debug?

EDIT

L'ouput di print_r, come per i commenti, non conteneva "Articles_model". La prima cosa di livello è sopra la mia testa, ma CTRL-F non lo è. Anche i log di Apache menzionare questo ...

[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

ho pensato ho riparato, ma no, si veda il commento sul mio risposta. Per qualche motivo, $this->article_model non è un oggetto.

Perché? Sono stato a una fiera mondiale, un picnic e un rodeo e questa è la cosa più stupida che abbia mai sentito su un paio di auricolari. Sei sicuro di avere i codici di oggi?

+1

Sulla riga 12, poco prima che si verifichi l'errore. Fai un 'print_r ($ this);'. Nel primo livello delle proprietà dell'oggetto (si spera che questo non sia un problema, anche se potrebbe ...) cercare "Articoli_modello". Se non sei sicuro se è il primo livello, prova ad aggiornare la tua domanda con alcuni dei risultati di 'print_r' in modo che possiamo aiutarti di più. – Webnet

+0

Fatto. OP aggiornato Grazie. Ancora nessuna gioia. – noel

+1

Questo, gente, è come titolo una domanda. – SomeKittens

risposta

2

aveva uno sguardo più da vicino e la risposta è molto semplice: Prova a cambiare questa linea:

public function __contruct(){ 

a questo:

public function __construct(){ 

;)

+0

Beh, sembra sospetto. Dopo aver risolto il problema, ho trovato facilmente un paio di piccoli bug e ora funziona. Mahalo. – noel

0

ho trovato il problema. Era nel route.php. Queste linee

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

ho cambiato a questo ...

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

E ora ho un 404 perché il mio database è vuoto, come previsto. Ancora non so perché queste regole ...

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

dal primo tutorial senza "pagine" in maiuscolo. Il mondo non lo saprà mai ...

+0

Registro dei capitani, questo in realtà non ha funzionato. Falso allarme. Ancora nessuna gioia. Le route di chasement sospette in realtà restituivano 404 perché l'IC non riusciva a trovare il controller. Il viaggio continua. Perché non $ this-> articles_model un modello? ** Non mi frega niente dell'inferno come lo fai, mi porti semplicemente alla Primaria, hai sentito! ** – noel

0

In primo luogo, per quanto riguarda i commenti: print_r($this); è una pessima idea, in quanto ti confonderà solo. $this contiene quasi nessuna roba ci.Quello che stai cercando è print_r(get_instance());

Per quanto riguarda il tuo problema: ci nome utente minuscolo. Cambia la tua linea a questa e la tua pronti per partire:

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

Bene, ho provato a cambiare la linea già presente nell'OP. E 'print_r (get_instance());' era confuso come 'print_r', solo un enorme array si è presentato alla pagina. Grazie per aver provato. – noel

+0

Siamo spiacenti, ho perso la tua nota sulla capitalizzazione. Hai visto da vicino le uscite di quel 'print_r'? Il tuo modello non è lì? – Chronial

+0

Ho fatto un CTRL-F per cercarlo ma "Articles_model" è apparso solo nel messaggio di errore non nella matrice print_r(). – noel

Problemi correlati