sql >> Database >  >> RDS >> Mysql

Codeigniter - Toegangsmodellen en database over routering

Om de voorgestelde URL-structuur te implementeren, moeten we één centrale dispatcher maken die

  1. Analyseer de gevraagde URL.
  2. Zou een database doorzoeken om de categorie te vinden en weer te geven.
  3. Als er geen categorie werd gevonden, zou het proberen het tekstbericht te vinden en weer te geven.

Klinkt als de baan voor een controller. Maar hoe maken we een controller die op elk verzoek reageert? Met behulp van wildcard-routing!

application/config/routes.php

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

Nu wordt elk verzoek, ongeacht de URI, doorgestuurd naar Default_controller.php .

Maar hoe schrijven we controller zonder te weten welke methode zal worden aangeroepen? Er is een manier:de ingebouwde controller-servicemethode _remap .

Van de documenten :

Dus ik heb mezelf laten fantaseren en een concept Default_controller voor je maken:

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

Opmerking:testte dit antwoord op de vers gedownloade Codeigniter 3.0.3




  1. ERROR 1067 (42000):Ongeldige standaardwaarde voor 'end_time'

  2. SELECT DISTINCT ON-query's converteren van Postgresql naar MySQL

  3. Hoe te testen op overlappende datums in PostgreSQL

  4. Gebruik Access of MySQL als een backend-database