CodeIgniter: नियंत्रक, क्रिया, URL जानकारी कैसे प्राप्त करें


124

मेरे पास ये URL हैं:

इन URL से कंट्रोलर नेम, एक्शन नाम कैसे प्राप्त करें। मैं CodeIgniter नौसिखिया हूँ। क्या यह जानकारी प्राप्त करने के लिए कोई सहायक कार्य है

उदाहरण के लिए:

$params = helper_function( current_url() )

जहां $paramsकुछ ऐसा बन जाता है

array (
  'controller' => 'system/settings', 
  'action' => 'edit', 
  '...'=>'...'
)

जवाबों:


217

आप URI क्लास का उपयोग कर सकते हैं :

$this->uri->segment(n); // n=1 for controller, n=2 for method, etc

मुझे यह भी बताया गया है कि निम्नलिखित काम है, लेकिन वर्तमान में मैं परीक्षण करने में असमर्थ हूं:

$this->router->fetch_class();
$this->router->fetch_method();

क्योंकि मेरे नियंत्रक में उप फ़ोल्डर है, इसलिए $ यह-> uri-> खंड (1) रिटर्न नियंत्रक नाम शायद गलत है। आपकी मदद के लिए धन्यवाद, मैं informations पाने के लिए $ इस-> राउटर का उपयोग करता हूं।
noname.cs

2
निर्देशिका को सही ढंग से प्राप्त करने के लिए आप इसका उपयोग भी कर सकते हैं: $ यह-> राउटर-> fetch_directory ();
jmserra

6
अरे यदि आप Codeigniter 3 का उपयोग कर रहे हैं, तो नियंत्रक उपयोग के लिए: $ this-> राऊटर-> वर्ग; विधि के लिए: $ यह-> राउटर-> विधि; निर्देशिका के लिए: $ यह-> राउटर-> निर्देशिका; प्रलेखन: codeigniter.com/user_guide/installation/…
कार्टालॉट

$ this-> router-> fetch_class (); $ this-> router-> fetch_method (); यह काम करता हैं।
दिनेश पात्रा

133

URI सेगमेंट का उपयोग करने के बजाय आपको यह करना चाहिए:

$this->router->fetch_class(); // class = controller
$this->router->fetch_method();

इस तरह से आप जानते हैं कि आप हमेशा सही मानों का उपयोग कर रहे हैं, भले ही आप एक रूट किए गए URL के पीछे हों, एक उप-डोमेन आदि में।


मुझे अभी पता चला है कि इस पद्धति का उपयोग करके, आप किसी दृश्य को कॉल करते समय सही क्लास विधि का नाम नहीं प्राप्त कर सकते हैं modules::run('module/controller/action')। यह केवल लोड किए गए पृष्ठ की राउटर जानकारी दिखाता है। क्या इससे पार पाने का कोई रास्ता है?
Starx

बहुत बढ़िया! यह कितना सुरक्षित है, इस पर कोई भी शब्द। यानी यह खराब हो सकता है?
HellaMad

यह स्वीकृत उत्तर होना चाहिए - या शॉर्टकट का उपयोग करते हुए: $
यह-

1
यदि आप मार्गों को मार्गों में परिवर्तित नहीं करते हैं। एफपीपी, $this->routerउस वर्ग को लौटाता है जिसमें कोड चलता है, लेकिन ओवरराइड के साथ वास्तविक राउटर नकाब नहीं। आप क्या करना चाहते हैं, इसके आधार पर दोनों उत्तर काफी उपयोगी हैं।
टिबोर एसज़ज़

इन विधियों को हटा दिया गया है, उपयोग करें $this->router->classऔर $this->router->methodइसके बजाय
रिचर्ड

30

विधियों को पदावनत किया जाता है।

$this->router->fetch_class();
$this->router->fetch_method();

आप इसके बजाय गुणों तक पहुँच सकते हैं।

$this->router->class;
$this->router->method;

उपयोगकर्ता कोड देखें

URI रूटिंग विधियाँ fetch_directory (), fetch_class (), fetch_method ()

गुणों के साथ CI_Router::$directory, CI_Router::$classऔर CI_Router::$methodसार्वजनिक होने के नाते और उनके संबंधित fetch_*()अब और कुछ नहीं कर रहे हैं बस गुणों को लौटाने के लिए - यह उन्हें रखने का कोई मतलब नहीं है।

वे सभी आंतरिक, अनिर्दिष्ट तरीके हैं, लेकिन हमने अभी के मामले में पीछे की ओर-अनुकूलता बनाए रखने के लिए उन्हें पदावनत करने का विकल्प चुना है। यदि आप में से कुछ ने इनका उपयोग किया है, तो आप अब इसके बजाय केवल संपत्तियों तक पहुँच सकते हैं:

$this->router->directory;
$this->router->class;
$this->router->method;


11

एक अतिरिक्त के रूप में

$this -> router -> fetch_module(); //Module Name if you are using HMVC Component

यह fetch_module()कॉल मेरे लिए CI 2.1.2 में काम नहीं करता है। यह /system/router.php फ़ाइल में नहीं मिल सकता है।
टिम पीटरसन 27'13

1
@timpeterson, यह केवल HMVC घटक में उपलब्ध है जैसा कि उत्तर में बताया गया है।
स्टारएक्स

धन्यवाद, आपने मुझे बचा लिया
बारब्ज_होल

7

अपडेट करें

उत्तर जोड़ा गया था 2015 में था और निम्न विधियों को अब हटा दिया गया है

$this->router->fetch_class();  in favour of  $this->router->class; 
$this->router->fetch_method(); in favour of  $this->router->method;

नमस्ते आपको निम्नलिखित दृष्टिकोण का उपयोग करना चाहिए

$this->router->fetch_class(); // class = controller
$this->router->fetch_method(); // action

इस उद्देश्य के लिए लेकिन इसके उपयोग के लिए आपको अपने हुक का विस्तार करने की आवश्यकता है CI_Controllerऔर यह एक आकर्षण की तरह काम करता है, आपको यूरी सेगमेंट का उपयोग नहीं करना चाहिए


3

यदि आप इस $ का उपयोग कर रहे हैं-> uri-> सेगमेंट, यदि urls पुनर्लेखन नियम बदलते हैं, तो सेगमेंट नाम मिलान खो जाएगा।


3

कक्षा या पुस्तकालयों में कहीं भी इस कोड का उपयोग करें

    $current_url =& get_instance(); //  get a reference to CodeIgniter
    $current_url->router->fetch_class(); // for Class name or controller
    $current_url->router->fetch_method(); // for method name

1

URL का अंतिम सेगमेंट हमेशा एक्शन होगा। कृपया इसे प्राप्त करें:

$this->uri->segment('last_segment');

-1
$this->router->fetch_class(); 

// fecth क्लास कंट्रोलर में $ इस-> राउटर-> fetch_method ();

// तरीका


-4

नियंत्रक वर्ग कोई कार्य नहीं कर रहा है।

इसलिए मैं आपको निम्नलिखित लिपियों का उपयोग करने की सलाह देता हूं

global $argv;

if(is_array($argv)){
    $action = $argv[1];
    $method = $argv[2];
}else{
    $request_uri = $_SERVER['REQUEST_URI'];
    $pattern = "/.*?\/index\.php\/(.*?)\/(.*?)$/";
    preg_match($pattern, $request_uri, $params);
    $action = $params[1];
    $method = $params[2];
}

पूर्वनिर्धारित कार्य उपलब्ध हैं जैसे $ यह-> राउटर-> fetch_class () और fetch_method () तो हमें मैन्युअल रूप से करने की आवश्यकता नहीं है।
नवेद रमजान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.