【问题标题】:Load Zend_Form from a view helper in Zend?从 Zend 中的视图助手加载 Zend_Form?
【发布时间】:2011-05-31 21:00:04
【问题描述】:

是否可以从视图助手加载 Zend_Form?我在登录操作方法中使用这个表单。但我也希望这个表单在每个页面的导航中都可见(因此实际上还没有调用登录操作),表单的 post 方法将发送到登录操作方法。

我猜应该使用视图助手来完成,但我不知道如何。

有什么想法吗?

我试过这个: 我的视图助手:

class Zend_View_Helper_LoginForm
{
    function getLoginForm(){
    $form = new Form_LoginForm();
    return $form;
    }
}

我从我的布局中这样称呼它: <?php echo $this->form(); ?> 但这不起作用。 (不过,我可以通过操作方法调用相同的表单!)

在这种情况下,它给了我这个错误(这没有意义,因为我的助手只有 9 行长):

Warning: Missing argument 1 for Zend_View_Helper_Form::form() in C:\xampplite\htdocs\zendpr\library\Zend\View\Helper\Form.php on line 44

【问题讨论】:

    标签: zend-framework forms view helper


    【解决方案1】:

    您的视图助手应该扩展 Zend_View_Helper_Abstract 类,并且视图助手的方法必须与该类同名:

    class Zend_View_Helper_LoginForm extends Zend_View_Helper_Abstract
    {
        function loginForm() {
            $form = new Form_LoginForm();
            return $form;
        }
    }
    

    你在你的视图脚本中这样称呼它:

    echo $this->loginForm();
    

    如果你打电话:

    echo $this->form();
    

    您正在使用视图助手 Zend_View_Helper_Form

    【讨论】:

      【解决方案2】:

      让您的 View_Helper 扩展 Zend_View_Helper_Abstract 并覆盖 setView()

      class Zend_View_Helper_XX extends Zend_View_Helper_Abstract {
      
          public $view;
      
          public function setView(Zend_View_Interface $view)
          {
              $this->view = $view;
          }
      

      在控制器操作中初始化表单并设置表单引用

      // controller action code
      $this->view->form = $form;
      

      然后在视图助手中,您可以通过视图引用表单

      // view helper code
      $this->view->form;
      

      【讨论】:

      • 事情是,我不想在我的操作方法中初始化表单,因为这个表单应该在每个页面上都可见,我必须在每个操作方法上初始化它。这就是为什么我想用一个动作助手从我的布局文件中调用它......
      【解决方案3】:
      class Zend_View_Helper_LoginForm extents Zend_Form {
      
          function getLoginForm(){
      
              $form = new Form_LoginForm();       
      
              return $form;
          }
      } 
      

      $this->view->form=$form;

      两者都将返回表单。视图形式更具体的视图。

      将此添加到您的 phtml 视图文件中

      echo $this->form();

      要回答这个问题 - 删除括号

      应该是 echo $this->form;

      【讨论】:

        猜你喜欢
        • 2011-03-25
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-04
        • 1970-01-01
        相关资源
        最近更新 更多