我有一个表单,我正在尝试设置操作。我想使用我在引导程序中创建的路径,在我的表单文件(扩展Zend_Form)中而不是在控制器或视图中声明操作。 通常当我想使用路线时,我会做类似
的事情$this->url(array(), 'route-name');
在视图中,或
$this->_helper->url(array(), 'route-name');
在控制器中。
如何从Zend_Form中调用路由?
编辑: 我已经放弃了尝试将路由加载到zend_form。也许在将来的版本中可能有一个功能可以轻松地做到这一点?
我为我的表单创建了一个viewScript并设置了该路由: 在init函数中:
$this->setDecorators(array(
'PrepareElements',
array(
'ViewScript', array(
'viewScript' => 'forms/formView.phtml'
))));
并在视图文件中:
<form method="post" action="<?php echo $this->url(array(), 'route-name'); ?>" enctype="application/x-www-form-urlencoded">
<?php
foreach ($this->element->getElements() as $element)
{
echo $element;
}
?>
</form>
答案 0 :(得分:18)
方法1:获取路由器
// in your form
public function init()
{
$router = Zend_Controller_Front::getInstance()->getRouter();
$url = $router->assemble(
array(
'paramterName0' => 'parameterValue0',
'paramterName1' => 'parameterValue1',
),
'routeName'
);
$this->setAction($url);
...
}
方法2:获取View对象的实例并直接调用url-view-helper
// in your form
public function init()
{
$url = Zend_Layout::getMvcInstance()->getView()->url(array(), 'routeName';
$this->setAction($url);
...
}
我更喜欢方法1.它更详细,但你的表单中有一个较少的依赖。
答案 1 :(得分:1)
如果在我的控制器操作中:
$this->view->form = $form;
我将使用view helper url在我的视图脚本(xxx.phtml)中生成表单操作url:
$url = $this->url(array('controller'=>'my-controller-name',
'action'=>'my-action-name'),
'my-route-name'
);
$this->form->setAction($url);
echo $this->form;
答案 2 :(得分:1)
现在,您可以通过Zend_View
类上的getView()
方法访问Zend_Form
对象:
// init your form
public function init()
{
$view = $this->getView();
$url = $view->url(array('module'=>'login','action'=>'login'));
$this->setAction($url);
...
}
可以在ZF 1.8 +
上获得此帮助答案 3 :(得分:0)
我不知道它何时被添加,但是有一个更简单的解决方案。
您可以使用getView()检索表单的视图对象,该视图对象可以访问已注册的路径。
//In the form
$this->setAction($this->getView()->url(array('param1' => 'value1'), 'routeName'));