【问题标题】:Zend Framework: Add form in layoutZend Framework:在布局中添加表单
【发布时间】:2012-08-09 22:11:15
【问题描述】:

我创建登录表单并添加 UserController->loginAction:

 public function loginAction() {
    $form = new Application_Form_Login();

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

如何在 layouts/scripts/header.phtml 中添加我的表单,因为我尝试了这个,但不起作用:

<?php echo $this->loginForm ?>

如果我在 view/scripts/user/login.phtml 中回显表单,我会看到登录表单。

这是我的登录表单:

class Application_Form_Login extends Zend_Form {

public function init() {
    $this->setDecorators(array('FormElements', 'Form'))
            ->setAction("/user/login/");

    $username = new Zend_Form_Element_Text(array('name' => 'username', 'class' => 'input-text'));
    $username->setRequired(true)
            ->setDecorators(array('ViewHelper',));

    $this->addElements(array($username));
}

}

【问题讨论】:

  • 最终结果如何?您可以将您的解决方案作为答案,然后接受它,其他人也可以投票。

标签: zend-framework zend-form


【解决方案1】:

您正在寻找渲染功能:

<?php
    echo $this->loginForm->render();
?>

【讨论】:

  • __toString() 方法会呈现表单,因此可以像问题中所做的那样回显它。无需直接调用render。
【解决方案2】:

由于布局与视图对象是分开的,因此您需要将表单分配给布局。

在您的控制器中:

public function loginAction()
{
    $form = new Application_Form_Login();

    // assign the form to the layout
    $this->_helper->layout()->loginForm = $form;
}

在您的布局中:

<?php if ($this->layout()->loginForm): ?>
    <?php echo $this->layout()->loginForm; ?>
<?php endif; ?>

试试这个:

// in controller:
$form = new Application_Form_Login();
$this->view->placeholder('loginForm')->set($form);

---------------

// in layout script:
$form = $this->placeholder('loginForm');
if ($form instanceof Zend_Form) {
    echo $form;
}

【讨论】:

  • 好的,我试试这个,没有什么我看不到表格
  • 布局只是一个占位符,因此如果您从控制器或视图中为其分配某些内容,它应该在布局本身中可用。上面的代码在 ZF 1.11.11 和 1.11.12 上对我来说很好
  • 你现在的代码是什么?您确定将有效的表单对象分配给布局吗?您现在是否尝试在视图或布局中呈现表单?仅当您访问 UserController::loginAction 时才会设置布局中的值,因为它是从那里分配的。
  • 我猜你的布局中的var_dump($this-&gt;layout()-&gt;loginForm); 会返回NULL?对吗?
  • header.phtml 是您的布局还是您的实际布局呈现 header.phtml?如果是这样,它是如何呈现的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 2012-06-06
  • 2013-04-04
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多