2010-03-16 2 views
0

Zend로 시작하는 모든 게시물과 자습서를 읽으면 약간 혼란 스럽습니다. 문제를 해결할 수있는 다양한 방법이 있기 때문입니다.젠드 프레임 워크를 사용하여 모듈 식 웹 사이트 구축하기 : 올바른 방향으로 가고 있습니까?

내가 올바른 방향에 있는지 알기 위해 내 코드에 대한 피드백이 필요합니다.

public function postDispatch(Zend_Controller_Request_Abstract $request) 
{ 
    $menu = new Menu(); 

    //Render menu in menu.phtml 
    $view = new Zend_View(); 

    //NEW view -> add View Helper 
    $prefix = 'My_View_Helper'; 
    $dir = dirname(__FILE__).'/../../View/Helper/'; 
    $view->addHelperPath($dir,$prefix); 

    $view->setScriptPath('../application/default/views/scripts/menu'); 
    $view->menu = $menu->getMenu(); 

    $this->getResponse()->insert('menu', $view->render('menu.phtml'));  

} 

그것을가 나는 설정해야 그 권리 :

단순히 내가 postDispatch 방법으로 컨트롤러 플러그인을 구축 (로그인 한 사람에 따라) 내 사이트에 대한 (하드 코딩) 탐색을 얻으려면 다시 도우미 경로? 플러그인 컨트롤러 인 ViewSetup에서이 작업을 수행했습니다. Doctype, headlinks 및 helper 경로와 같은보기에 대한 설정을합니다 (이 단계는 책에서 나온 것입니다 : Zend Framework in Action). 시작

Menu 클래스는 다음과 같습니다

class Menu 
{ 
protected $_menu = array(); 

/** 
* Menu for notloggedin and logged in 
*/ 
public function getMenu() 
{ 
    $auth = Zend_Auth::getInstance(); 
    $view = new Zend_View(); 

    //check if user is logged in 
    if(!$auth->hasIdentity()) { 
    $this->_menu = array(
    'page1' => array(
    'label' => 'page1', 
    'title' => 'page1', 
    'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page1')) 
    ), 
    'page2' => array(
    'label' => 'page2', 
    'title' => 'page2', 
    'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page2')) 
    ), 
    'page3' => array(
    'label' => 'page3', 
    'title' => 'page3', 
    'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page3')) 
    ), 
    'page4' => array(
    'label' => 'page4', 
    'title' => 'page4', 
    'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page4')) 
    ), 
    'page5' => array(
    'label' => 'page5', 
    'title' => 'page5', 
    'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page5')) 
    ) 
    ); 
    } else { 
    //user is vom type 'client' 
    //.. 

    } 

    return $this->_menu; 
} 
} 

Here's 내보기 스크립트 : 이것은 지금까지 노력하고 있습니다

<ul id="mainmenu"> 
    <?php echo $this->partialLoop('menuItem.phtml',$this->menu) ?> 
</ul> 

. 제 질문은 이렇습니다. 이렇게하는 것이 일반적입니까? 개선 할 것이 있습니까? 저는 젠드 (Zend)에 처음 왔으며 웹에서 자주 사용되지 않는 비공식 튜토리얼을 보았습니다. 심지어 책은 오토로더가 언급 된 곳에서는 이미 사용되지 않습니다.

답변

0

새보기를 작성하면 안됩니다. Boostrap에 이미 View 객체를 생성 했으므로 (그리고 나머지 부분을 렌더링하는 데 사용했기 때문에) 이미 생성 된 뷰 객체를 가져와야합니다.

당신이 설정에 Zend_Application_Resource를 사용하는 경우 부트 스트랩에서보기 당신은 이런 식으로 가져올 수 있습니다

$view = Zend_Controller_Front::getInstance() 
    ->getParam('bootstrap') 
    ->getResource('view'); 

이 방법은 다시보기 도우미 경로를 설정하고 다른 뷰 객체를 생성 할 필요가 없습니다. 당신은 상대적으로 작은 편에 노력하지 않는

$view = Zend_Layout::getMvcInstance()->getView(); 
+0

두 번째 해결 방법이있는 Wok! 많은 감사! 나는이 웹 사이트를 여기에서 좋아한다. 포럼보다 빠른 응답. 이 두 가지 경우의 차이점을 알려주면 좋을 것입니다. 권장되는 솔루션이 있습니까? – Oliver

+0

권장되는 솔루션이 있다고 나는 말할 수 없습니다. 응용 프로그램 설정에 따라 다릅니다. –

0

, 나는, 컨트롤러에 을이 작업을 수행 할 것입니다 : 당신이 당신의 응용 프로그램을 부트 스트랩하는 Zend_Application를 사용하지 않는 경우

이 뭔가를 시도 할 수 이 기능을 많은 컨트롤러에 추가해야하기 때문입니다. 부트 스트랩을 체크인하거나 심지어 레이아웃을 체크인하는 것이 적절하지 않을지라도 나에게 더 이해할 수있는 이유는 무엇입니까?

관련 문제