كود إشعال:كيفية الحصول على معلومات وحدة التحكم والإجراء وعنوان URL

StackOverflow https://stackoverflow.com/questions/2062086

  •  20-09-2019
  •  | 
  •  

سؤال

لدي عناوين URL هذه:

كيفية الحصول على اسم وحدة التحكم واسم الإجراء من عناوين URL هذه.أنا مبتدئ CodeIgniter.هل هناك أي وظيفة مساعدة للحصول على هذه المعلومات

السابق:

$params = helper_function( current_url() )

أين $params يصبح شيء من هذا القبيل

array (
  'controller' => 'system/settings', 
  'action' => 'edit', 
  '...'=>'...'
)
هل كانت مفيدة؟

المحلول

يمكنك استخدام فئة URI:

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

لقد قيل لي أيضًا أن العمل التالي يعمل، لكن لا يمكنني اختباره حاليًا:

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

نصائح أخرى

بدلاً من استخدام شرائح URI، يجب عليك القيام بذلك:

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

وبهذه الطريقة تعرف أنك تستخدم دائمًا القيم الصحيحة حتى لو كنت خلف عنوان URL موجه، أو في مجال فرعي، وما إلى ذلك.

يتم إهمال الأساليب.

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

يمكنك الوصول إلى الخصائص بدلاً من ذلك.

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

يرى دليل مستخدم Codeigniter

طرق توجيه 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;

طريق اخر

$this->router->class

كإضافة

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

تحديث

تمت إضافة الإجابة في عام 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 وهو يعمل كالسحر، ولا يجب عليك استخدام شرائح uri

إذا كنت تستخدم $this->uri->segment، وإذا تغيرت قواعد إعادة كتابة عناوين URL، فسيتم فقدان مطابقة اسم المقاطع.

استخدم هذا الرمز في أي مكان في الفصل أو المكتبات

    $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

سيكون الجزء الأخير من عنوان URL هو الإجراء دائمًا.يرجى الحصول على مثل هذا:

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

// فئة fecth الفئة في وحدة التحكم $ this-> router-> fetch_method () ؛

// طريقة

فئة وحدة التحكم لا تعمل أي وظائف.

لذلك أنصحك باستخدام البرامج النصية التالية

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];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top