2011-10-13 3 views
1

내가 잘못 해석하고 있는지 잘 모르겠지만 제발 정정 해주세요. 응용 프로그램 "패키지"를로드하기 위해 Code Igniter의 Loader 클래스를 사용하고 있습니다. 대부분 잘 작동합니다. 그러나, 저를 걸려 넘어지는 한 가지 방법은 뷰 경로가 작동하는지 (또는 작동하지 않는지)입니다. 보기 경로를 통해 루프된다 add_package_path()가 호출 될 때코드 점화 장치 2.0.3 loader add_package_path 계단식보기

은 기본적으로

는 "패키지 뷰 파일 경로를 설정하고, 일치하는 항목이 발견되면 해당 뷰는 다음과 같습니다. 문서 (http://codeigniter.com/user_guide/libraries/loader.html)에서

, 그것은 말한다

이 경우 패키지에서보기 이름 충돌이 발생할 수 있으며 잘못된 패키지가로드 될 수 있습니다.이 문제를 방지하려면 add_package_path()를 호출 할 때 선택적인 두 번째 매개 변수 인 FALSE를 설정하십시오. "

그들이주는 예제 코드입니다 :

$this->load->add_package_path(APPPATH.'my_app', TRUE); 
$this->load->view('my_app_index'); // Loads 
$this->load->view('welcome_message'); // Will not load the default welcome_message b/c the second param to add_package_path is TRUE 

// Reset things 
$this->load->remove_package_path(APPPATH.'my_app'); 

// Again without the second parameter: 
$this->load->add_package_path(APPPATH.'my_app', TRUE); 
$this->load->view('my_app_index'); // Loads 
$this->load->view('welcome_message'); // Loads 

내가 예제 코드에 오타가 있다고 생각하고 그들이 add_package_path에 두 번째 호출에 FALSE를 전달하는 의미(). 내 해석에 따르면, FALSE를 전달하면 패키지의 뷰 경로를 건너 뛰고 원래의 뷰 경로를 사용해야합니다.

그러나 실제로 FALSE를 전달하려고하면 외부 패키지에서보기를 가져 오는 중입니다 (보기 이름이 외부 패키지와 현재 응용 프로그램 모두에 있음).

public function add_package_path($path, $view_cascade=TRUE) 
{ 
    $path = rtrim($path, '/').'/'; 

    array_unshift($this->_ci_library_paths, $path); 
    array_unshift($this->_ci_model_paths, $path); 
    array_unshift($this->_ci_helper_paths, $path); 

    $this->_ci_view_paths = array($path.'views/' => $view_cascade) + $this->_ci_view_paths; 

    // Add config file path 
    $config =& $this->_ci_get_component('config'); 
    array_unshift($config->_config_paths, $path); 
} 

그것이 무엇을하기에, 뷰 경로 배열의 전면에 패키지보기 경로를 추가 할 수 있습니다 : /system/core/Loader.php에서 Loader 클래스를 보면,이 add_package_path의 정의는()이다 TRUE 또는 FALSE 값. 실제로 Loader 클래스에서 또한 뷰,라는 _ci_load을 ($ _ ci_data)로드하는 함수에서이은으로 보는 견해의 경로를 선택하는 부분입니다

foreach ($this->_ci_view_paths as $view_file => $cascade) 
{ 
    if (file_exists($view_file.$_ci_file)) 
    { 
     $_ci_path = $view_file.$_ci_file; 
     $file_exists = TRUE; 
     break; 
    } 

    if (! $cascade) 
    { 
     break; 
    } 
} 

그것은 나에게 보인다 경우 그 add_package_path의 두 번째 매개 변수가 TRUE 또는 FALSE인지 여부에 관계없이 뷰가 외부 패키지에 있습니다 (add_package_path 호출에서 배열의 from에 있기 때문에). 이 문서에는 너무 많은 문서가 없으며 이에 대한 버그 보고서가 표시되지 않았습니다. 다시 말하지만, 제 해석기는 add_package_path()에 전달 된 두 번째 매개 변수가 FALSE이면 패키지의 뷰 경로를 건너 뛰어야한다는 것입니다. 나는 _ci_load()에서 캐스케이드 검사가 중단 대신 계속되어야한다고 생각하고 파일 검사 전에 찾아야합니다.

내가보고해야 할 버그입니까, 아니면 여기서 잘못된 내용을 해석하고 있어야하며 기능이 정상적으로 작동하고 있습니까?

+0

동일한 문제가 있습니다.해결 방법을 찾을 수 있었습니까? –

답변

1

이 날짜에도 오타가 있습니다! 두 번째 코드 예제의 두 번째 인수는 FALSE 여야합니다. 사용의

내 해석은 다음과 같습니다

두 번째 인수가 TRUE 인 경우

는, 다음 뷰는 단지 외부 패키지에서로드됩니다.

두 번째 인수가 FALSE 인 경우 외부 패키지를 먼저 확인하여 발견 된 위치에 따라보기가 외부 패키지 또는 로컬 저장소에서로드됩니다. 외부 패키지에 없다면 로컬 repo에서 검색을 계속해야한다는 생각입니다.

관련 문제