2014-12-15 4 views
2

나는CakePHP는 단지 요소처럼 부모보기로 아이 뷰에서 변수를 전달하는 3

<!-- src/Template/Common/view.ctp --> 
    <h1><?= $this->fetch('title') ?></h1> 
    <?= $this->fetch('sidebar') ?> 

내가 통해 문자열을 전달할 수 있습니다 포함

<!-- src/Template/Posts/view.ctp --> 
<?php 
    $this->extend('/Common/view'); 
    //1 
    $this->assign('title', $post); 
    //2 
    $this->start('sidebar'); 
    //... 
    $this->end(); 
?> 

및 부모를 포함하는 아이 뷰 파일이 방법 1,2. 하지만 하위 뷰에서 상위 뷰로 변수를 전달하는 방법은 무엇입니까?

답변

5

덕분에

$this->set('toParent' , $toParent); 

같은 변수를 설정하고

$toParent = $this->get('toParent'); 

과 같이 쉽게 부모 뷰에서 사용 볼 수 있듯이 이것은 가능합니다 :

+0

'$ toParent = $ this-> get ('toParent');'를 사용할 필요가 없으므로 컨트롤러에서 설정 한 것처럼이 변수를 사용할 수 있습니다. – Kamoris

0

MVC paradigm에서보기는 변수를 다른 것으로 전달해서는 안되며 주어진 변수를 구문 분석하고 표시해야합니다. 변수 전달은 컨트롤러의 작업입니다.

설정이 완료되면 출력을 자식보기의 부모보기 또는 레이아웃에있는 블록을 렌더링하는 것입니다. 이 경우 $this->assign('blockname', $variable); 또는 View Blocks에 설명 된 동등한 기능을 사용해야합니다. 자녀보기에서 "이것은 불가능하다"말하려고 노력하는 모든 사람들에게

+0

귀하의 견해와는 달리 뷰는 $ this-> 요소 ('helpbox', [ 'var'=> 1])와 같은 다른보기 요소에 변수를 전달할 수 있습니다. 패스 변수에 대한 부모보기. 나는 또한 할당에 대해 알고 있지만 이것은 내 대답이 아닙니다 :) –

+0

다시, 당신이 달성하려고하는 것, 원칙에 반대하는, 그것이 지원되지 않는 이유입니다. 좀 더 특수화 된 뷰는 렌더링 된 데이터 이외의 다른 것을 반환하지 않아야합니다. 변수를 사용하여 부모와 정보를 교환해서는 안됩니다. 요소는 블록 외부에서 살고있는 격리 된 조각이라는 의미에서 블록과 약간 다릅니다. 그래서 호출 할 때 데이터를 전달해야하지만 뷰에서 준비하는 것은 아닙니다. 또한 요소는 렌더링 된 데이터 이외의 것을 반환하지 않습니다. – user221931