কোডআইগনিটার: কীভাবে কন্ট্রোলার, অ্যাকশন, ইউআরএল তথ্য পাবেন


124

আমার এই ইউআরএল রয়েছে:

কীভাবে এই ইউআরএলগুলি থেকে নিয়ামকের নাম, ক্রিয়া নাম পাবেন। আমি কোডইগনিটার নবাগত। এই তথ্যটি পেতে কোনও সহায়ক ফাংশন রয়েছে কি?

উদা:

$params = helper_function( current_url() )

যেখানে $paramsকিছু হয়ে যায়

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

উত্তর:


217

আপনি ইউআরআই ক্লাস ব্যবহার করতে পারেন :

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

আমাকে আরও বলা হয়েছে যে নিম্নলিখিত কাজগুলি, তবে বর্তমানে পরীক্ষা করতে অক্ষম:

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

কারণ আমার নিয়ামকের সাব ফোল্ডার রয়েছে, সুতরাং so এই-> ইউরি-> বিভাগ (1) রিটার্ন কন্ট্রোলারের নামটি ভুল হতে পারে। আপনার সহায়তার জন্য ধন্যবাদ, আমি তথ্য পেতে to এই-> রাউটারটি ব্যবহার করি।
noname.cs 14'10

2
ডিরেক্টরি সঠিকভাবে পাওয়ার জন্য আপনি এটি ব্যবহার করতে পারেন: $ এটি-> রাউটার-> ফেচ_ডাইরেক্টরি ();
jmserra

6
আরে যদি আপনি কোডিগিটার 3 ব্যবহার করেন তবে কন্ট্রোলার ব্যবহারের জন্য: $ এই-> রাউটার-> শ্রেণি; পদ্ধতির জন্য: $ এই-> রাউটার-> পদ্ধতি; ডিরেক্টরি জন্য: $ এই-> রাউটার-> ডিরেক্টরি; ডকুমেন্টেশন: codeigniter.com/user_guide/installation/...
cartalot

$ this-> router-> fetch_class (); $ this-> router-> fetch_method (); এটা কাজ করে।
দিনেশ পাত্র

133

ইউআরআই বিভাগগুলি ব্যবহার না করে আপনার এটি করা উচিত:

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

এই উপায়ে আপনি জানেন যে আপনি কোনও সাব-ডোমেন ইত্যাদিতে রাউটেড URL এর পিছনে থাকলেও আপনি সর্বদা সঠিক মানগুলি ব্যবহার করছেন


আমি সবেমাত্র জানতে পেরেছি যে এই পদ্ধতিটি ব্যবহার করে, মত ভিউ কল করার সময় আপনি সঠিক শ্রেণিবদ্ধের নামটি পেতে পারেন না modules::run('module/controller/action')। এটি কেবল বোঝা পৃষ্ঠার রাউটারের তথ্য দেখায়। এ থেকে উত্তরণের কোনও উপায় আছে কি?
স্টারেক্স

অসাধারণ! এটি কতটা নিরাপদ তা নিয়ে কোনও শব্দ? অর্থাৎ এটাকে কি স্পোফ করা যায়?
হেল্লাম্যাড

এটি স্বীকৃত উত্তর হতে হবে - বা শর্টকাট ব্যবহার করে: $ এই-> রাউটার-> শ্রেণি
ক্রিস্টোকিভি

1
আপনি রুটস.এফপি-তে রুটগুলি পরিবর্তন না করে, কোডটি $this->routerযে শ্রেণিতে চলে সেগুলি ফেরত দেয় তবে ওভাররাইডের সাথে মুখোশযুক্ত প্রকৃত রাউটারটি নয়। আপনি যা করতে চান তার উপর ভিত্তি করে উভয় উত্তরই বেশ কার্যকর।
টিবোর জাজস

এই পদ্ধতিগুলি চিত্রিত করা হয়েছে, ব্যবহার করুন $this->router->classএবং $this->router->methodপরিবর্তে
রিচার্ড

30

পদ্ধতিগুলি হ্রাস করা হয়।

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

পরিবর্তে আপনি বৈশিষ্ট্য অ্যাক্সেস করতে পারেন।

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

দেখুন ইউজার গাইড CodeIgniter

ইউআরআই রাউটিং পদ্ধতিগুলি ফেচ_ডাইরেক্টরি (), ফেচ_ক্লাস (), ফেচ_মোথার ()

বৈশিষ্ট্য সহ 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()কলটি সিআই ২.১.২-এ আমার জন্য কাজ করে না। এটি / সিস্টেমেস / আরউটার.এফপি ফাইলে খুঁজে পাচ্ছেন না।
টিম পিটারসন

1
@ টিম্পিটারসন, উত্তরে বলা হয়েছে এটি কেবল এইচএমভিসি উপাদানগুলিতে উপলব্ধ।
স্টারেক্স

ধন্যবাদ, আপনি আমাকে বাঁচিয়েছেন
বার্ব্জ_ওয়াইওল

7

হালনাগাদ

উত্তরটি যোগ করা হয়েছিল ২০১৫ সালে এবং নিম্নলিখিত পদ্ধতিগুলি এখন অবচয় করা হয়েছে

$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

আপনি যদি $ এই-> ইউরি-> বিভাগটি ব্যবহার করেন, যদি url পুনর্লিখনের নিয়ম পরিবর্তন হয় তবে বিভাগগুলির নামের সাথে মিল মিলবে।


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 এর শেষ বিভাগটি সর্বদা ক্রিয়া হবে the দয়া করে এটি পেতে:

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

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

// নিয়ন্ত্রক বিভাগে ক্লাস ক্লাস - এটি-> রাউটার-> ফেচ_মোথড ();

// পদ্ধতি


-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];
}

এখানে pred এটি-> রাউটার-> ফেচ_ক্লাস () এবং ফেচ_মোথডো () এর মতো পূর্বনির্ধারিত ফাংশন উপলব্ধ রয়েছে তবে আমাদের ম্যানুয়ালি করার দরকার নেই।
নাভেদ রমজান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.