2010-07-20 26 views
10

我有一个表格,我正在尝试设置操作。我想在我的表单文件(它扩展了Zend_Form)中声明动作,而不是在控制器或视图中使用我在引导程序中创建的路由。 通常当我想用一个路线我这样做Zend Form SetAction使用命名路线

$this->url(array(), 'route-name'); 
视图

,或者

$this->_helper->url(array(), 'route-name'); 
控制器

如何从Zend_Form中调用路由?


编辑: 我已经放弃尝试的路线加载到Zend_Form的。也许在未来的版本中可能有一个功能可以轻松地做到这一点?

我创建了一个viewScript我的形式,并设置了路线: 在窗体初始化函数:

$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

不要放弃这么快。只需给我们时间来回答你的问题;) – 2010-07-20 18:29:27

回答

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对象的一个​​实例并调用th Ë网址 - 视图 - 助手直接

// in your form  
public function init() 
{ 
    $url = Zend_Layout::getMvcInstance()->getView()->url(array(), 'routeName'; 
    $this->setAction($url); 
    ... 
} 

我宁愿方法1.它是更冗长,但你必须在你形成一个依赖较少。

+0

方法一的问题是我已经在引导中设置了路线。 方法二太棒了! – 2010-07-21 10:49:03

+0

@Dickie方法1没有定义新的路线。它用现有的路线组装一个Url。 看看Zend_View_Helper_Url。它完全一样:获取路由器并调用汇编。 – 2010-07-21 11:10:06

+0

你说得对。我误解了代码。我认为这是创建一条新路线,而不是使用路线。这正是我所追求的。谢谢。 – 2010-07-21 13:13:29

1

,如果在我的控制器动作:

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

我将使用视图助手URL生成在我看来脚本(xxx.phtml)形式的行动网址:

$url = $this->url(array('controller'=>'my-controller-name', 
        'action'=>'my-action-name'), 
       'my-route-name' 
      ); 

$this->form->setAction($url); 

echo $this->form; 
0

我不知道当它被添加时,但有一个更简单的解决方案。

您可以使用getView()获取表单的视图对象,该对象可以访问已注册的路由。

//In the form 
$this->setAction($this->getView()->url(array('param1' => 'value1'), 'routeName')); 
1

现在,你可以在Zend_Form类通过getView()方法访问Zend_View对象:

// init your form  
public function init() 
{ 
    $view = $this->getView(); 
    $url = $view->url(array('module'=>'login','action'=>'login')); 
    $this->setAction($url); 
    ... 
} 

操作可能会ZF 1.8+此帮助