如何将对象视图作为动作助手

时间:2011-08-26 10:25:23

标签: php zend-framework zend-view

我有一个自定义的Action Helper工作正常。 如果用户没有登录,它会生成一个动态登录框,如果是,则生成一个菜单。

但我在这里遇到了问题。 我想从一个名为user_menu.phtml

的小视图生成该菜单

如何将该视图添加到我的视图助手中,并将其分配给对象?

好的,有些更新,抱歉愚蠢,实际上我有行动助手:

对不起如果我在撰写初始问题时非常具体。

所以我有一个Action助手:library / Hlp / Action / Helper 如果用户不是商店,那帮助者会呈现一个表格。

这是我的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="/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
    } 

除了该表单,我想添加一些链接或其他HTML内容,这些链接或其他HTML内容将存储在视图文件中。

2 个答案:

答案 0 :(得分: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.S。我在视图脚本中使用了short_tags + the equal sign (=) shorthand来表示echo,如果你不使用它们,你应该用<?php echo $this->email ?>替换

答案 1 :(得分:-2)

从视图中,您可以将其传递给帮助者

myHelper($this,$otherVars )

然后从助手那里你可以调用另一个助手

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