Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Codeigniter - Modelos de acesso e banco de dados em roteamento


Para implementar a estrutura de url proposta, devemos criar um despachante central que
  1. Analise o URL solicitado.
  2. Consulta um banco de dados para encontrar e exibir a categoria.
  3. Se nenhuma categoria for encontrada, ele tentará encontrar e exibir a postagem de texto.

Parece o trabalho para um controlador. Mas como fazemos um controlador que responde a todas as solicitações? Com a ajuda do roteamento curinga!

aplicativo/config/routes.php

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

Agora, todas as solicitações, independentemente do URI, serão roteadas para Default_controller.php .

Mas como escrevemos controller sem saber qual método será chamado? Existe uma maneira:o método de serviço interno do controlador _remap .

De dos documentos :

Então me deixei fantasiar e criar um conceito Default_controller para você:

aplicativo/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);
    }
}

Observação:testei esta resposta no Codeigniter 3.0.3