sql >> Databáze >  >> RDS >> Mysql

Codeigniter - Přístup k modelům a databázi na směrování

Pro implementaci navrhované struktury URL musíme vytvořit jednoho centrálního dispečera, který by

  1. Analyzujte požadovanou adresu URL.
  2. Požádal by databázi, aby našel a zobrazil kategorii.
  3. Pokud by nebyla nalezena žádná kategorie, pokusí se najít a zobrazit textový příspěvek.

To zní jako práce pro kontrolora. Jak ale vyrobit ovladač, který bude reagovat na každý požadavek? S pomocí směrování pomocí zástupných znaků!

application/config/routes.php

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

Nyní bude každý požadavek, bez ohledu na URI, směrován na Default_controller.php .

Ale jak zapíšeme kontrolér, aniž bychom věděli, jaká metoda se bude nazývat? Existuje způsob:vestavěná metoda obsluhy ovladače _remap .

Z dokumentů :

Nechal jsem se tedy fantazírovat a vytvořit pro vás koncept 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);
    }
}

Poznámka:testováno tuto odpověď na čerstvě staženém Codeigniter 3.0.3




  1. Připojte se ke vzdálené databázi MySQL z kontejneru dockeru

  2. Django ORM, vložte žádné datum a čas jako 0 do MySQL

  3. Migrace databází SQL pomocí příkazového řádku

  4. Přenesení aplikace Ruby/Rails/MRI do JRuby