Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/05/2014, 06:07
aprendiz94
Invitado
 
Mensajes: n/a
Puntos:
Mostrar en la vista resultado de la consulta o mensaje de error

Hola, estoy aprendiendo a usar Codeigniter y tengo una duda a la hora de gestionar los datos de una consulta. Estoy haciendo un blog (sólo como práctica) y quiero que la vista muestre la entrada (el artículo, la noticia) si es que existe, y si no existe que muestre un mensaje informando de eso.

El problema es que no sé si lo estoy haciendo correctamente. En la mayoría de los tutoriales al hacer una consulta ni siquiera comprueban si la consulta devuelve resultados. Hacen la consulta y envían el resultado directamente a la vista sin ninguna comprobación, como si asumieran que los datos existen sí o sí. En otros casos, antes de hacer la consulta inicializan las variables, si hay resultados reemplazan el contenido de esas variables y si no hay, así las devuelven igual, sin importar que estén vacías. O donde lo único que comprueban es que la variable con los datos existan, si no existen crean nuevas variables vacías.
Eso no me gusta y todavía no estoy encontrando ejemplos de cómo debería hacerse. Lo hice a mi manera, pero yo no sé, tengo muy poca experiencia.

No es sólo una duda que tengo con el Codeigniter, en realidad no sé cuál es la manera adecuada de hacer esto en el patrón MVC.


Esto es lo que yo hice y lo que me pareció más adecuado:

- El controlador recibe como parámetro el id de la entrada que va a traer de la base de datos.
- El modelo hace la consulta, si encuentra un registro devuelve los datos al controlador, de lo contrario devuelve false.
- El controlador comprueba el valor devuelto por el modelo. Primero creo la variable $entrada = null. Luego compruebo de que el valor devuelto por el modelo sea true (if ($resultado)), si es válido entonces pongo los datos en la variable $entrada['datos']. Luego envío los datos a la vista (con la variable $entrada).
En la vista se comprueba de que exista la variable $datos (o sea lo que sería $entrada['datos']), si no existe muestra un mensaje diciendo que no existe y de lo contrario muestra la entrada.


Modelo:

Código PHP:
public function traer_entrada($idEntrada)
{
    
$this->db->select('entrada_titulo, entrada_contenido, entrada_fecha_publicacion, usuarios.usuario_nick');
    
$this->db->from('entradas');
    
$this->db->join('usuarios''usuarios.id_usuario = entradas.foranea_autor_id_usuario');
    
$this->db->where('id_entrada'$idEntrada);

    
$query $this->db->get('');

    if (
$query->num_rows() != 1) {
        return 
false;
    }

    return 
$query->row();

Controlador:

Código PHP:
public function traer_entrada($id)
{
    
$this->load->model('entradas_model');
    
$resultado $this->entradas->traer_entrada($id);

    
$entrada null;
    if (
$resultado) {
        
$entrada['datos'] = array(
            
'titulo'    => $resultado->entrada_titulo,
            
'contenido' => $resultado->entrada_contenido,
            
'fecha'     => $resultado->entrada_fecha_publicacion,
            
'autor'     => $resultado->usuario_nick
        
);
    }

    
$data['contenido'] = $this->load->view('vistas/entrada'$entradatrue);
    
$this->load->view('plantillas/principal'$data);


entrada.php (vistas/entrada):

Código PHP:
<article id="entry">

    <?php if (isset($datos)): ?>

        <h1><?php echo $datos['titulo']; ?></h2>
        <p class="entry_info">Escrito por: <a href="<?php echo base_url(); ?>/usuarios/<?php echo $datos['autor']; ?>"><?php echo $datos['autor']; ?></a> el <?php echo $datos['fecha']; ?></p>
        <p class="entry_content"><?php echo $datos['contenido']; ?></p>

    <?php else: echo 'La entrada no existe.'; endif; ?>

</article>
Lo último es como una parte de la vista, pongo esa vista en otra vista, la plantilla principal, eso ya no es necesario ver. La duda sólo tengo en el proceso de transportar los datos desde el modelo hasta la vista y mostrar el contenido o un mensaje dependiendo del caso.

Espero que puedan ayudarme con esto, me confunde porque quiero aprender y sólo encuentro ejemplos así y no me gustan para nada, y creo que estas son cosas que sólo se aprenden viendo y experimentando.

Última edición por aprendiz94; 23/05/2014 a las 07:13