2012-07-27 4 views
0

파일 및 뷰를 포함하여 거의로드하지 않는 정적 클래스가있는 스크립트를 작성하고 있습니다. 컨트롤러에서 로더보기 메서드에서 컨트롤러 변수를 가져 오는 중입니까?

class load 
{ 
    public static function view($file_path, $area) 
    { 
     debug::log('getting view <b>' . $area . $file_path . '</b>.'); 
     ob_start(); 
     self::file($file_path, 'areas/' . $area . '/views'); 
     debug::log('flushing view <b>' . $area . $file_path . '</b>.'); 
     eturn ob_get_clean(); 
    } 

    public static function file($file, $folder) 
    { 
     if(is_file($file_path = ROOT . '/' . $folder . '/' . $file)) 
     { 
      if(require_once $file_path) 
      { 
       debug::log('file <b>' . $file_path . '</b> included.'); 
       return true; 
      } 
     } 
     else 
      debug::kill('requested file <b>' . $file_path . '</b> does not exist.'); 
    } 
} 

은 임 뷰 얻기 위해 뷰 메서드를 호출 : 분명히

$html = load::view('public', 'path/to/view/file.php'); 

, 이러한 행위를 사용하여 뷰 파일에서 컨트롤러에서 변수에 액세스 할 수 임 수 없습니다를, 그래서 내가 그랬어 뷰 클래스에 작은 수정은 바르 캡처 :

public static function view($file_path, $area, $vars = array()) 

을 그리고 바르에 열쇠를 얻을 코드의 다음 줄을 추가 :

while(list($n_list_var,$v_list_var)=each($vars)) 
     $$n_list_var = $v_list_var; 

하지만 다시 파일을로드하는 메소드를 사용하여 이후 vars에 액세스 할 수 없습니다.

파일을 포함 할 필요가있을 때마다 각 파일 포함 시도를 테스트하고 기록하기 때문에 코드를 반복하지 않으므로 파일을로드하는 방법이 있습니다. 그리고 로더 클래스 내부에 로더 뷰가 있으므로이 모든 메서드를 함께 사용합니다. 클래스를 사용하여 파일을로드하는 것을 포기해야합니까? 내 컨트롤러에서 확장 가능한 클래스에 대한 로더보기 메서드를 사용해야합니까?

내 전체 스크립트를 수정하는 대신 몇 가지 의견을 듣고 싶습니다 ... 갈 가장 좋은 방법은 무엇입니까? 아니면 내 문제를 해결할 방법이 있습니까? 어쩌면 __set과 __get 마법 방법을 사용하고 있을까요?

감사합니다,

답변

0

왜 단지 (아마도 당신이 덮어 쓰지 못하도록 클래스 변수로 file() 내부에서 사용하는 바르 이동) load::file()extract($vars)$vars 인수를 전달하지?

내가 대신 extract()를 사용하여 제안하고 있습니다 :

while(list($n_list_var,$v_list_var)=each($vars)) 
    $$n_list_var = $v_list_var; 

을 그건 그렇고, 당신의 클래스 Load 이름을하는 것이 좋습니다 것입니다.

+0

load :: file 메서드는 파일 만 포함하기 위해 사용되며 클래스가 포함 된 파일을로드하는데도 사용되어 vars를 추출 할 필요가 없습니다. 내 이해에 나쁜 연습이 될거야. 그런 이유로 나는 몇몇 대안을 찾고있다. (고마워, 나는 extract() 함수를 완전히 잊었다.) 그리고 왜 Load라는 이름을 지정하는 것이 좋은 생각일까요? – Henrique

+0

좋아, 변수를 사용하지 않고 파일을로드하려면'$ vars' 배열을 생략 할 수 없습니까? 나 자신을 포함한 많은 사람들이 클래스 이름의 대문자 사용을 고려합니다. – JMM

+0

예 할 수 있습니다. 나는 그저 나쁜 행동이라고 생각합니다. 어쩌면 모든 일을하는 것이 좋은 연습이 아니므로이 문제에 대한 대안을 더 많이 얻으 려합니다. 그 밖의 어떤 것도 내게 오지 않으면 나는 그것을 할 것이다. 감사합니다, – Henrique

관련 문제