Mysql
 sql >> Database >  >> RDS >> Mysql

Codeigniter - Modelli di accesso e database sul routing

Per implementare la struttura dell'URL proposta, dobbiamo creare un dispatcher centrale che

  1. Analizza l'URL richiesto.
  2. Ricercherebbe un database per trovare e visualizzare la categoria.
  3. Se non viene trovata alcuna categoria, proverebbe a trovare e visualizzare il post di testo.

Sembra il lavoro per un controller. Ma come si realizza un controller che risponda ad ogni richiesta? Con l'aiuto del routing con caratteri jolly!

applicazione/config/routes.php

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

Ora ogni richiesta, indipendentemente dall'URI, verrà indirizzata a Default_controller.php .

Ma come si scrive controller senza sapere quale metodo verrà chiamato? C'è un modo:il metodo di servizio del controller integrato _remap .

Da i documenti :

Quindi mi sono lasciato fantasticare e creare un concept Default_controller per te:

applicazione/controller/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:testato questa risposta su Codeigniter 3.0.3