Untuk menerapkan struktur url yang diusulkan, kita harus membuat satu operator pusat yang akan
- Analisis URL yang diminta.
- Akan query database untuk menemukan dan menampilkan kategori.
- Jika tidak ada kategori yang ditemukan, ia akan mencoba mencari dan menampilkan postingan teks.
Kedengarannya seperti pekerjaan untuk pengontrol. Tetapi bagaimana kita membuat pengontrol yang merespons setiap permintaan? Dengan bantuan perutean wildcard!
application/config/routes.php
$route['.*'] = 'default_controller';
Sekarang setiap permintaan, terlepas dari URI, akan dirutekan ke Default_controller.php
.
Tapi bagaimana kita menulis controller tanpa mengetahui metode apa yang akan dipanggil? Ada caranya:metode layanan pengontrol bawaan _remap
.
Dari dokumen :
Jadi saya membiarkan diri saya berfantasi dan membuat konsep Default_controller untuk Anda:
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);
}
}
Catatan:menguji jawaban ini pada Codeigniter 3.0.3