sql >> Base de Datos >  >> RDS >> Mysql

Codeigniter - Modelos de acceso y base de datos en enrutamiento

Para implementar la estructura de URL propuesta, debemos crear un despachador central que

  1. Analizar la URL solicitada.
  2. Consultaría una base de datos para encontrar y mostrar la categoría.
  3. Si no se encuentra ninguna categoría, intentará encontrar y mostrar la publicación de texto.

Suena como el trabajo para un controlador. Pero, ¿cómo hacemos un controlador que responda a cada solicitud? ¡Con la ayuda del enrutamiento comodín!

aplicación/config/routes.php

$route['.*'] = 'default_controller';

Ahora cada solicitud, independientemente de la URI, se enrutará a Default_controller.php .

Pero, ¿cómo escribimos controlador sin saber qué método se llamará? Hay una forma:el método de servicio del controlador incorporado _remap .

De los documentos :

Así que me permití fantasear y crear un concepto Default_controller para ti:

aplicación/controladores/Default_controller.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Default_controller extends CI_Controller {

    // Pseudocode ensues 
    public function _remap()
    {
        // www.mydomain.com/(someTextHere)
        $slug = $this->uri->segment(1);

        $result = $this->load_data($slug);

        echo $result;
    }

    private function load_data($slug)
    {
        // Trying to find a category
        $category = $this->category_model->find($slug);
        if($category !== false)
        {
            // Presumably loads view into buffer
            // and returns it to the calling method
            return $this->load_category($category);
        }

        Trying to find post
        $post = $this->post_model->find($slug);
        if($post !== false)
        {
            return $this->load_post($post);
        }

        // Neither category nor post found
        show_404();
    }

    private function load_category($category)
    {
        // http://www.codeigniter.com/user_guide/general/views.html#returning-views-as-data
        return $this->load->view("category", array("category" => $category), true);
    }
}

Nota:probé esta respuesta en el recién descargado Codeigniter 3.0.3