2013-03-21 4 views
3

extract() 함수를 사용하여 내 컨트롤러에 할당 된 모든 변수를 내 템플릿으로 추출하려고합니다. 간단한 예는 이것이다 :전역 범위를 사용하여 템플릿에 변수 추출

private function render() { 
     extract($this->controller_vars); 
     require_once("layout.php"); 
    } 

문제는 내 layout.php 내에서 내가 "포함"파일하지만 더 중요한 레이아웃 내에서 올바른 액션 /보기를 표시하는 다른 방법에 대한 호출을하고 있다는 것입니다.

// This method is called where I want to display the "content" page: 
    public function display_action() { 
     require_once("selected_action.php"); 
    } 

그래서 나는 효과적으로 layout.php의 내부 추출 된 변수에 액세스 할 수 있지만,이 동일한 컨트롤러의 방법으로 포함되어 있기 때문에 내보기/행동은하지 않습니다.

압축 해제 된 변수에 전역 액세스 권한을 부여 할 수있는 방법이 있습니까? 아니면 내 문제의 다른 솔루션을 제공 할 수 있습니까?

추가 정보 :

위의 2는 layout.php 파일에서 내보기 클래스

class views { 

     private function render() { 
       extract($this->controller_vars); 
       require_once("layout.php"); 
     } 


     public function display_action() { 
       require_once("selected_action.php"); 
     } 

    } 

의 방법의 버전을 "약화"된 코드는 그때 전화는 만들 것 로 :

<div id="content_area"> 
     $this->display_action(); 
    </div> 

01 자세히 자세히

필자는 $ this-> controller_vars라는 뷰 클래스의 배열 속성으로이 변수에 액세스 할 수 있습니다. 따라서 사용자 목록을 할당하면 $ this-> controller_vars [ 'users' ]; 나는 그것을 추출 할 수있는 방법을 찾고 있는데, $ this-> controller_vars [users ']에 단순한 $ users로 접근 할 수있다.

+0

이 OpenCart의 코드인가? – Pacerier

답변

0

나는 이것이 직접적인 대답은 아니라는 것을 이해한다. 당신은 'going'객체 지향을 고려해야 할 것입니다. 컨트롤러 및 액션 객체를 만들면 여전히 같은 방법으로 (autoloader을 사용하여) 포함/요구 될 수 있으며, 예를 들어 변수를 통해 객체에 변수를 전달할 수 있습니다. 생성자. 이 같은

뭔가 :

Class Layout { 
    public function processAction() { 
     $class = 'Action' . $selected_action; 
     $Controller = new $class($this->controller_vars); 
    } 
} 
+0

죄송합니다. OOP입니다. 질문의 크기를 최소화하기 위해 사용하는 특정 메서드를 붙여 넣었습니다.이 모든 메서드는 뷰 클래스에 있습니다. – mauzilla

+0

아, 방금 가시성 키워드를 발견했습니다. 이 경우, 내가 생각하는대로 구현하는 것이 더 쉬울 것입니다. – Rijk

+0

이 시점에서 나는 $ this-> controller_vars [ 'assigned_variable'];을 수행함으로써 변수에 접근 할 수있다. 하지만 난 그냥 쉽게 할 수있는 쉬운 방법을 찾고 있는데 오히려 그냥 $ assigned_variable (내가 데이터베이스에서 사용자의 배열을 가지고, 그것을 쉽게 print_r ($ 사용자)을 할 나타납니다;에 appose로 – mauzilla