2012-09-23 31 views
6

Estoy siguiendo el tutorial del Codeigniter website sobre cómo hacer una sección de noticias. En este momento estoy recibiendo un mensaje de propiedad indefinido en la línea 13.Propiedad indefinida de Codeigniter, o cómo mi controlador dejará de preocuparse y aprenderá a amar el modelo

Aquí está mi modelo. aplicaciones/modelos/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(); 
} 

Y aquí es el controlador. aplicaciones/controladores/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'); 
    } 
} 

Estas son todas las rutas que tengo de configuración. aplicaciones/config/routes.php

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

Mi base de datos se parece a esto

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

He intentado usar la propiedad con un capital de primera letra, $this->Articles_model, y no, $this->articles_model.

¿Me estoy perdiendo algo estúpido? Si es así, ¿qué es?
Si no es estúpido, ¿cómo puedo depurar?

EDITAR

que la salida de print_r, según los comentarios, no contenía "Articles_model". Lo primero está por encima de mi cabeza, pero CTRL-F no lo está. También los registros de Apache mencionan esto ...

[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

pensé que me fijo, pero no, ver el comentario en mi respuesta . Por algún motivo, $this->article_model no es un objeto.

¿Por qué? He estado en una Feria Mundial, un Picnic y un Rodeo, y esa es la cosa más estúpida que he oído venir a través de un par de auriculares. ¿Estás seguro de que tienes los códigos de hoy?

+1

En la línea 12, justo antes de recibir el error. Haz un 'print_r ($ this);'. En el primer nivel de las propiedades del objeto (con suerte, esto no está por encima de tu cabeza, aunque puede ser ...) busca "Articles_model". Si no está seguro de si es el primer nivel, intente actualizar su pregunta con algunos de los resultados de 'print_r' para que podamos ayudarlo más. – Webnet

+0

Hecho. OP actualizada Gracias. Todavía no hay alegría. – noel

+1

Esto, amigos, es la forma en que titula una pregunta. – SomeKittens

Respuesta

2

Tenía una mirada más cercana y la respuesta es muy simple: tratar de cambiar esta línea:

public function __contruct(){ 

a esto:

public function __construct(){ 

;)

+0

Bueno, eso parece sospechoso. Después de arreglar eso encontré un par de pequeños errores fácilmente y funciona ahora. Mahalo. – noel

0

encontré el problema. Estaba en el routes.php. Estas líneas

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

he cambiado a este ...

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

Y ahora me sale un 404 porque mi base de datos está vacía, como se esperaba. Todavía no sé por qué estas reglas ...

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

desde el primer trabajo tutorial sin "páginas" en mayúsculas. El mundo nunca sabrá ...

+0

Captains Log, Esto en realidad no funcionó. Falsa alarma. Todavía no hay alegría. Las rutas de chateo sospechosas realmente devolvieron 404 porque CI no pudo encontrar el controlador en absoluto. El viaje continúa. ¿Por qué no es $ this-> articles_model un modelo? ** No me importa un comino en el infierno cómo lo haces, solo me llevas a la primaria, ¡oye! ** – noel

0

En primer lugar, con respecto a los comentarios: print_r($this); es una muy mala idea, ya que solo te confundirá. $this contiene casi ninguna de las cosas de ci.Lo que usted está buscando es print_r(get_instance());

Sobre su problema: ci minúsculas nombres de miembros. Cambiar su línea para esto y su son buenos para ir:

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

Bueno, traté de cambiar la línea que ya está en el PO. Y 'print_r (get_instance());' era tan confuso como 'print_r', simplemente una enorme matriz flotaba en la página. Gracias por intentarlo. – noel

+0

Disculpa, extrañé tu nota sobre las mayúsculas. ¿Has mirado de cerca los resultados de ese 'print_r'? Tu modelo no está ahí? – Chronial

+0

Hice una CTRL-F para buscarla pero "Articles_model" solo apareció en el mensaje de error, no en la matriz print_r(). – noel

Cuestiones relacionadas