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();

내 컨트롤러에는 하위 폴더가 있으므로 $ this-> uri-> segment (1) 반환 컨트롤러 이름이 잘못되었을 수 있습니다. 도움을 주셔서 감사합니다. $ this-> router를 사용하여 정보를 얻습니다.
noname.cs

2
디렉토리를 올바르게 얻으려면 다음을 사용할 수도 있습니다. $ this-> router-> fetch_directory ();
jmserra

6
Codeigniter 3을 사용하고 있다면 Controller에 다음을 사용하십시오. $ this-> router-> class; 방법 : $ this-> router-> method; 디렉토리 : $ this-> router-> directory; 문서 : codeigniter.com/user_guide/installation/…
cartalot

$ this-> router-> fetch_class (); $ this-> router-> fetch_method (); 효과가있다.
Dinesh Patra

133

URI 세그먼트를 사용하는 대신 다음을 수행해야합니다.

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

이렇게하면 라우팅 된 URL 뒤에 있거나 하위 도메인 등에있는 경우에도 항상 올바른 값을 사용하고 있음을 알 수 있습니다.


이 메서드를 사용하면 modules::run('module/controller/action'). 로드 된 페이지의 라우터 정보 만 보여줍니다. 이것을 극복 할 방법이 있습니까?
Starx 2012

대박! 이것이 얼마나 안전한지에 대한 말씀이 있습니까? 즉, 스푸핑 될 수 있습니까?
HellaMad 2013 년

이것은 허용 대답해야한다 - 또는 바로 가기를 사용하여 : $ this-> 라우터 기반> 클래스
ChristoKiwi

1
route.php에서 경로를 변경하면 $this->router코드가 실행되는 클래스를 반환하지만 재정의로 마스킹 된 실제 라우터는 반환하지 않습니다. 두 가지 답변 모두 원하는 작업에 따라 매우 유용합니다.
Tibor Szasz

이러한 방법은 폐기 $this->router->class되었으며 $this->router->method대신 사용되었습니다.
Richard

30

메소드는 더 이상 사용되지 않습니다.

$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;


11

추가로

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

fetch_module()호출은 CI 2.1.2에서 작동하지 않습니다. /system/router.php 파일에서 찾을 수 없습니다.
tim peterson

1
@timpeterson, 답변에서 말한 것처럼 HMVC 구성 요소에서만 사용할 수 있습니다.
Starx

감사합니다, 당신은 저를 구했습니다
Barbz_YHOOL

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하며 매력처럼 작동하므로 uri 세그먼트를 사용해서는 안됩니다


3

$ this-> uri-> segment를 사용하는 경우 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의 마지막 세그먼트는 항상 작업입니다. 다음과 같이 받으십시오.

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

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

// fecth class the class in controller $ this-> router-> 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];
}

$ this-> router-> fetch_class () 및 fetch_method ()와 같은 미리 정의 된 함수가 있으므로 수동으로 수행 할 필요가 없습니다.
Naveed 람잔
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.