2013-08-09 2 views
1

Joomla 컨트롤러에서보기로 데이터를 전달하는 많은 예를 보았습니다 (예 : here). 하지만 특정 뷰 파일 (view.html.php)에 Joomla 하위 컨트롤러를 전달해야합니다. 나는 하루 종일 그것에 대해 검색하고 해결책을 찾지 못했습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?보기 Joomla 하위 컨트롤러에서 데이터를 전달하는 방법?

+0

에서보기를 호출? 하위 컨트롤러가 부모 동작을 모두 가져야합니다. – DevZer0

+0

뷰를 렌더링해야 할 경우, $ this-> setRedirect (JRoute :: _ ('내 뷰의 경로')); 하지만 그것으로 일부 데이터를 전달하고보기에서 액세스 할 수있는 방법을 찾을 수 없습니다 – Ruwantha

+0

당신이 하위 컨트롤러 말을하면 JController를 확장 뭔가를 말하는거야? – DevZer0

답변

3

Joomla MVC는 매우 느슨하며 여러 가지 방법으로이 동작을 구현할 수 있습니다. 나는이 줌라에서 MVC를 구현하는 대부분의 표준 순서라고 생각합니다 :

  1. 컨트롤러는 입력을 읽고 변수 세션의 관련 매개 변수를 설정
  2. 컨트롤러는 뷰
  3. 뷰로드로 리디렉션 모델
  4. 모델은 세션에서 매개 변수를 읽습니다.

그러나 3의 매개 변수를 처리하여 모델에 전달할 수 있습니다. 이것은 실제로 스타일/취향의 문제입니다. Joomla에서는 예를 들어 $ this-> get ('Data')을 사용하여 뷰에서 모델을 호출 할 수 있으므로 params를 전달할 여지는 없습니다. 그러나 $ model-> getData2 ($ param1, $ param2)를 호출하도록 선택할 수 있습니다.

기본 호출은 다음과 같습니다

단일 호출에 입력을 읽고 이전에 저장된 세션 데이터에 다시 떨어질
JApplication::getUserStateFromRequest() 

;

setUserState 세션에서이 정보를 유지하고 getUserState는 데이터를 검색하는 모델에 사용되는.

그러나 url에서 params를 전달하면됩니다. 그런 다음 view.html.php를 사용하여 메소드를 호출하기 전에 입력을 파싱하고 모델의 내부 상태를 설정하거나 ($ model-> setState) 리다이렉트를 완전히 피하고 컨트롤러에서 모델 및 뷰를로드하십시오 (더 표준적인 것처럼 보임). MVC에 쉽게 접근 할 수 있지만 Joomla에서는 거의 볼 수 없습니다.) 뷰를 렌더링 할 subcontroller를 사용할 수없는 이유

는 직접 컨트롤러

$vName  = 'yourview'; 
    $vFormat = 'html'; // raw 

    if ($view = $this->getView($vName, $vFormat)) { 
     $model = $this->getModel($vName); 
     $model->setState('filter.type', $type); 
     $view->setModel($model, true); 

     // Push document object into the view. 
     $view->assignRef('document', $document); 

     $view->display(); 
    } 
+0

$ model-> getData2 ($ param1, $ param2) 방식으로 모델과 통신 중입니다. 제 질문은 뷰와 컨트롤러를 의사 소통하는 것이 었습니다. 나는 세션없이 이것을 할 수있는 방법이 있어야한다고 생각한다. – Ruwantha

+0

당신은 setRedirect (JRoute :: _ ('index.php? option = ... & param1 = something & param2 = somethingelse; 또는 컨트롤러에서 수동으로 뷰를 인스턴스화하고 render() 메소드를 호출 할 수 있습니다.) –

+0

예 . 고마워.하지만 다른 모든 프레임 워크와 같은 기능이 있다면 여전히 좋겠다. – Ruwantha

관련 문제