Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Codeigniter — modele dostępu i bazy danych dotyczące routingu

Aby zaimplementować proponowaną strukturę adresu URL, musimy stworzyć jednego centralnego dyspozytora, który

  1. Przeanalizuj żądany adres URL.
  2. Przeprowadziłby zapytanie do bazy danych, aby znaleźć i wyświetlić kategorię.
  3. Jeśli nie zostanie znaleziona żadna kategoria, spróbuje znaleźć i wyświetlić post tekstowy.

Brzmi jak praca dla kontrolera. Ale jak stworzyć kontroler, który odpowiada na każde żądanie? Z pomocą routingu z użyciem symboli wieloznacznych!

application/config/routes.php

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

Teraz każde żądanie, niezależnie od URI, będzie kierowane do Default_controller.php .

Ale jak napisać kontroler, nie wiedząc, jaka metoda zostanie wywołana? Jest na to sposób:wbudowana w kontroler metoda obsługi _remap .

Z dokumentacji :

Więc pozwoliłem sobie fantazjować i stworzyć dla Ciebie koncepcję Default_controller:

aplikacja/kontrolery/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);
    }
}

Uwaga:przetestowałem tę odpowiedź na świeżo pobranym Codeigniter 3.0.3




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak utrzymać pole kolejności wyświetlania w php

  2. wybierz wiele wierszy o różnej wartości z tej samej tabeli

  3. Najlepszy sposób na uniknięcie zduplikowanych wpisów do bazy danych mysql

  4. Scalić 2 tabele dla zapytania SELECT?

  5. Solenie moich hashów za pomocą PHP i MySQL