Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Codeigniter - Zugriffsmodelle und Datenbank zum Routing

Um die vorgeschlagene URL-Struktur zu implementieren, müssen wir einen zentralen Dispatcher erstellen, der

  1. Analysieren Sie die angeforderte URL.
  2. Würde eine Datenbank abfragen, um die Kategorie zu finden und anzuzeigen.
  3. Wenn keine Kategorie gefunden wird, wird versucht, den Textbeitrag zu finden und anzuzeigen.

Klingt nach dem Job für einen Controller. Aber wie machen wir einen Controller, der auf jede Anfrage antwortet? Mit Hilfe von Wildcard-Routing!

application/config/routes.php

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

Jetzt wird jede Anfrage, unabhängig von der URI, an Default_controller.php weitergeleitet .

Aber wie schreiben wir einen Controller, ohne zu wissen, welche Methode aufgerufen wird? Es gibt einen Weg:die eingebaute Controller-Service-Methode _remap .

Aus den Dokumenten :

Also habe ich mich phantasieren lassen und ein Konzept Default_controller für Sie erstellt:

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

Hinweis:Diese Antwort wurde auf dem frisch heruntergeladenen Codeigniter 3.0.3