كود إشعال:كيفية الحصول على معلومات وحدة التحكم والإجراء وعنوان URL
-
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;
طرق توجيه 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];
}