Mysql
 sql >> Base de données >  >> RDS >> Mysql

Codeigniter - Modèles d'accès et base de données sur le routage

Pour implémenter la structure d'url proposée, nous devons créer un répartiteur central qui

  1. Analysez l'URL demandée.
  2. Interrogerait une base de données pour trouver et afficher la catégorie.
  3. Si aucune catégorie n'est trouvée, il essaiera de trouver et d'afficher le message texte.

Cela ressemble au travail d'un contrôleur. Mais comment faire un contrôleur qui réponde à chaque demande ? Avec l'aide du routage générique !

application/config/routes.php

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

Désormais, chaque requête, quel que soit l'URI, sera acheminée vers Default_controller.php .

Mais comment écrire controller sans savoir quelle méthode sera appelée ? Il existe un moyen :la méthode de service intégrée au contrôleur _remap .

Depuis la documentation :

Alors je me suis laissé fantasmer et créer pour vous un concept Default_controller :

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

Remarque :testé cette réponse sur le Codeigniter 3.0.3