zend-framework - 使用命名路由的Zend Form SetAction

标签 zend-framework zend-form zend-route

我有一个要为其设置操作的表格。我想使用在 bootstrap 中创建的路由在表单文件(扩展Zend_Form)中而不是在 Controller 或 View 中声明操作。
通常,当我想使用路线时,我会做类似的事情

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

在 View 中,或
$this->_helper->url(array(), 'route-name');

在 Controller 中。

如何在Zend_Form中调用路线?

编辑:
我放弃了尝试将路由加载到zend_form中的操作。也许在将来的版本中可能有一个功能可以轻松做到这一点?

我为表单创建了一个viewScript并在其中设置路由:
在窗体init函数中:
$this->setDecorators(array(
    'PrepareElements',
        array(
            'ViewScript', array(
                    'viewScript' => 'forms/formView.phtml'
            ))));

并在 View 文件中:
<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>

最佳答案

方法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。它比较冗长,但是形式上的依赖较少。

关于zend-framework - 使用命名路由的Zend Form SetAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3288901/

相关文章:

javascript - Zend_Form Jquery 和 fileUploadErrorIniSize

php - 从 JS 或 CSS 文件中删除 Cookie

mysql - zend 框架 insert() 和 LAST_INSERT_ID() 搞砸了

php - Zend 框架和 Wordpress 集成

php - zf2 表单和对象绑定(bind),不清除未传递的值

zend-framework - 是否存在类似于 Zend Validator Identical 的 Zend Filter?

php - Magento 模块的 URL 重写

zend-framework - Zend Routes 翻译 URL

php - 创建和更新 Zend_Search_Lucene 索引

php - 使用 Zend Framework 中的 Zend_Controller_Router_Route_Regex 将多个 URL 与参数匹配