2011-08-26 81 views
0

我有一个工作正常的自定义动作助手。 如果用户没有登录,它会生成一个动态登录框,如果他是,它正在生成一个菜单。如何将视图作为对象加入动作助手

但是在这里我有一个问题。 我想从一个叫做user_menu.phtml的小视图中生成该菜单

如何将该视图放入我的视图帮助器中,并将其分配给对象?

好了,一些更新,遗憾的是愚蠢的,actualy我有动作助手:

对不起,如果我是不够具体而写我最初的问题。

所以我有一个动作助手在:library/Hlp/Action/Helper 如果用户没有在旅馆里闲逛,那么这个帮助器就会呈现一个表单。

这里是我的助手方法,做这项工作:

public function preDispatch() 
{ 
    $view = $this->getView(); 

    $identity = Zend_Auth::getInstance()->getIdentity(); 

    $session = new Zend_Session_Namespace('users_session'); 
    $user_id = $session->idd; 

    if(!empty($identity)) { 
     $userModel = new Application_Model_Vartotojai(); 
     $user_email = $userModel->geUserRowBy('id', $user_id); 
     $user_email = $user_email['email']; 

     $view->login_meniu = $identity.' - 
    [id:'.$user_id.']<br />['.$user_email.'] <br/> 
    <a href="/authentication/logout">Log OUt</a>'; 
    //here I would like to read view file to an object or some other variable 
    //if posible to an object si I would be able to inject some values 

    } else {   
     $form = new Application_Form_LoginForm(); 
     $view->login_meniu = $form; 
     $view->register_link = '<br /><a href="https://stackoverflow.com/users/register">Register</a>'; 
     //here I would like to read view file to an object or some other variable 
    //if posible to an object si I would be able to inject some values 
    } 

Additionaly这种形式我想添加一些链接或其他HTML内容,这将BR存储在一个视图文件。

回答

3

所有你需要做的是延长Zend_View_Helper_Abstract类。然后您将视图对象存储在公共属性$view中。

通过使用对象,您可以用

return $this->view->partial('user_menu.phtml'); 

更新

使您的文件,因为你已经更新了你的问题,我会更新我的答案离开原来的答案,因为它仍然是有效的先前的问题。

你的情况,你已经有$view对象,做你问在注释只需使用连接到视图这样的partial helper

$renderedScript = $view->partial('user_menu.phtml', 
    array('id' => $user_id, 'email' => $user_email['email'])); 

通过给数组或对象作为部分调用的第二个参数,您可以在脚本文件中将它们用作模型。例如:

// content of user_menu.phtml 
<h1>Login info</h1> 
<p> 
    [id: <?=$this->user_id?>]<br /> 
    [<?=$this->email?>] <br/> 
    <a href="/authentication/logout">Log Out</a>' 
</p> 

P.我在视图脚本中使用了short_tags + the equal sign (=) shorthand作为回显,如果您不使用它们,您应该用<?php echo $this->email ?>

+0

谢谢Fabio,我认为您的回答接近真相,但我仍然无法正常工作。所以我必须初始化$ view_obj = new Zend_View_Helper_Abstract();然后如何指定我想使用的视图文件? – madcatzx

+0

@madcatzx你应该在你的问题中发布你的当前代码来澄清你的需求。你已经有看法帮手了,是吗?所以在你的类中扩展'Zend_View_Helper_Abstract',你就没事了。我发布了一些代码,也许你可以看看它吗? – Fabio

+0

@madcatzx我已经更新了我的答案以适应您的新请求。 – Fabio

-2

从视图中,可以通过这个来辅助

myHelper($this,$otherVars) 

然后从助手,你可以调用其他帮助

myHelper($view, $otherVars){ 
    $view->otherHelper() 
}