प्रस्तावित यूआरएल संरचना को लागू करने के लिए, हमें एक केंद्रीय प्रेषक बनाना होगा जो
- अनुरोधित URL का विश्लेषण करें।
- श्रेणी को खोजने और प्रदर्शित करने के लिए डेटाबेस को क्वेरी करेगा।
- यदि कोई श्रेणी नहीं मिली तो यह टेक्स्ट पोस्ट को खोजने और प्रदर्शित करने का प्रयास करेगा।
नियंत्रक के लिए नौकरी की तरह लगता है। लेकिन हम एक नियंत्रक कैसे बनाते हैं जो हर अनुरोध का जवाब देता है? वाइल्डकार्ड रूटिंग की सहायता से!
एप्लिकेशन/कॉन्फ़िगरेशन/रूट्स.php
$route['.*'] = 'default_controller';
अब हर अनुरोध, यूआरआई पर ध्यान दिए बिना, Default_controller.php
. पर भेजा जाएगा .
लेकिन हम यह जाने बिना नियंत्रक कैसे लिखेंगे कि किस विधि को बुलाया जाएगा? एक तरीका है:अंतर्निहित नियंत्रक सेवा विधि _remap
।
दस्तावेज़ से :
इसलिए मैंने खुद को आपके लिए Default_controller की कल्पना करने और एक अवधारणा बनाने दिया है:
एप्लिकेशन/नियंत्रक/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);
}
}
नोट:हाल ही में डाउनलोड किए गए Codeigniter 3.0.3पर इस उत्तर का परीक्षण किया। ए>