레이아웃 스크립트에서 호출 된 헬퍼를 사용하여 Zend View 속성 얻기
-
20-09-2019 - |
문제
나는 나의 메인 네이비를 만들기 위해 도우미를 썼다. 이 헬퍼의 일부는 사용자가보기에 할당되었는지 확인하여 로그인 한 사용자가 있는지 확인합니다.
if($this->view->user)
{
//do stuff
}
그러나 레이아웃 스크립트 에서이 헬퍼를 호출 할 때 $ this-> view-> user에 액세스 할 수 없습니다. 널 값이 있습니다 (var_dump ($ this-> view view 객체를 반환합니다. , 즉
$this->layout()->user = $this->user;
그리고 도우미에서
if($this->view->layout()->user)
{
//do stuff
}
각보기 스크립트에서 데이터를 레이아웃에 전달하려면 라인을 추가해야한다는 의미입니다.
레이아웃 스크립트에서 호출 된 도우미가 뷰의 속성에 액세스 할 수있는 방법이 있습니까?
편집하다*
소스는 다음과 같습니다.
<?php
class Zend_View_Helper_MainNav extends Zend_View_Helper_Abstract {
public function mainNav()
{
if ($this->view->layout()->navType == 'none'){
$html = '<div id="nav"><a href="/" id="logo">Sum puzzles</a></div>';
} else if($this->view->layout()->navType == 'small'){
$html = '<div id="nav" class="small"><a href="/" id="logo">Sum puzzles</a><ul>' .
'<li><a href="/puzzle/view" class="button">play a puzzle</a></li>' .
'<li><a href="/sequence/play" class="button">puzzle sequences</a></li>' .
'<li><a href="/puzzle/create" class="button">create a puzzle</a></li>';
if(!$this->view->user)
{
$html .= '<li><a href="/teachers" class="button">teachers area</a></li>';
}
$html .='</ul></div>';
} else if($this->view->layout()->navType == 'large'){
$html = '<div id="nav" class="large"><a href="/" id="logo">Sum puzzles</a><ul>' .
'<li><a href="/sequence/play" class="playSequence">Play a sequence of puzzles</a></li>' .
'<li><a href="/puzzle/create" class="createPuzzle">Create your own puzzles</a></li>';
if(!$this->view->user)
{
$html .= '<li><a href="/teachers" class="teachersArea">teachers area</a></li>';
}
$html .= '</ul></div>';
}
return $html;
}
}
해결책 5
마침내 문제의 근원에 도달했습니다
내 application.ini 파일에는 줄이있었습니다
resources.view[] =
온라인 튜토리얼에서 복사 한 오래된 버전의 Zend의 유산이라고 생각합니다.
해당 라인을 삭제하면 문제가 해결되었습니다.
다른 팁
기본적인 예를 만들었습니다.
////////////////////////////////////////////////
// application/controllers/IndexController.php
////////////////////////////////////////////////
<?php
class IndexController extends Zend_Controller_Action
{
public function init() {
Zend_Layout::startMvc() ;
$this->view->test_h1 = "H1 test value" ;
}
public function indexAction()
{
$this->view->test_h2 = "H2 test value" ;
}
}
////////////////////////////////////////////////
// application/views/helpers/Qwer.php
////////////////////////////////////////////////
<?php
class Zend_View_Helper_Qwer extends Zend_View_Helper_Abstract {
public function qwer() {
return "<h1>{$this->view->test_h1}</h1>"
. "<h2>{$this->view->test_h2}</h2>" ;
}
}
////////////////////////////////////////////////
// application/views/scripts/layout.phtml
////////////////////////////////////////////////
<?php echo $this->qwer() ?>
////////////////////////////////////////////////
// Output
////////////////////////////////////////////////
<h1>H1 test value</h1><h2>H2 test value</h2>
헬퍼 클래스에서 setView 메소드를 작성하면 Zend_view가 헬퍼에 자체적으로 주입됩니다.
class Ldm_View_Helper_SubMenu
{
public function subMenu($items)
{
// Build SubMenu
$subMenu = '';
$template = '
<ul id="subnav">
%s
</ul>';
$rowTemplate = '
<li>
<a href="%s" %s>%s</a>
</li>';
$rows = '';
foreach ($items as $key => $values)
{
$rows .= sprintf($rowTemplate,
$values['url'],
(($this->view->action == $key) ? 'class="selected"' : ''),
$values['name']);
}
$subMenu = sprintf($template, $rows);
return $subMenu;
}
public function setView(Zend_View_Interface $view)
{
$this->view = $view;
}
나는 당신이 어딘가에 논리 오류가 있다고 생각하는 경향이 있습니다. 이 시도:
// in your controller action
$this->view->test = 'testing 123';
// at the start of your helper method, called from your layout
echo $this->view->test;die;
당신은 무엇을 얻었습니까?
헬퍼를 처음으로 호출하면보기가 현재보기로 설정됩니다.
나중에 뷰를 변경하면 올바른 뷰를 가리킬 수 없습니다.
$this->_helper->layout->assign('vars', $val);
$this->view->layout()->vars;
제휴하지 않습니다 StackOverflow