Zend_Form设置操作 - 它可以在Zend应用程序内置子目录中工作吗?

时间:2009-10-28 23:13:28

标签: zend-framework zend-form base-url

我的应用程序是在我的本地服务器的子目录中构建的,看起来像这样:

http://localhost/application/

问题在于,当我将表单操作设置为“/ form / save”时,表单路由到“localhost / form / save”,这不存在。

如果我将表单操作设置为“/ application / form / save”,则会出现错误,因为Zend使用其Front_Controller中的URL输入来选择要用于请求的模块,控制器和操作。

是否有一种简单的方法可以将base_url解析出来?由于某种原因,它除了表单之外的其他所有内容。

另一种选择是将base_url添加到所有表单操作中,以便您的应用程序可以在不同的环境中工作,然后在控制器收到操作时将其解析出来。

是否有一种简单的方法可以设置一个变量来做这样的事情,已经内置到Zend中? 如果没有,有什么解决方案?

我无法在任何地方找到解决此问题的任何内容。

3 个答案:

答案 0 :(得分:4)

问题是由于在操作中包含初始斜杠引起的。当您使用根相对链接设置链接时,它相当于在目标锚点位于同一域名下时设置绝对链接。 (“/ form / save”相当于“http://localhost/form/save”)。

在您的情况下,如果您想将数据发送到其他控制器/操作,则听起来需要向表单添加基本URL。您正在使用Zend_Form(对吗?),最优雅的解决方案是继承Zend_Form,覆盖setAction()方法,将您的基本网址添加到您设置的每个操作中。

class My_Form extends Zend_Form
{
    ...
    public function setAction($action)
    {
        $baseAction = rtrim($this->_getBaseUrl(),'/') . $action;  // Will remove a slash from the end of the base URL, so form actions start with a slash.

        parent::setAction($baseAction);
    }

    private function _getBaseUrl()
    {
        // Retrive your base url from somewhere (config might be a good place).
    }        
}

现在,每当您从My_Form创建新表单并致电My_Form::setAction()时,您都会自动包含您的基本网址。

希望这有帮助。

答案 1 :(得分:0)

您可以将操作留空并在同一操作中处理表单数据。

答案 2 :(得分:0)

我是Zend Framework的新手,所以我不知道这是否是最好的解决方案,但它对我来说很好。

我使用以下代码设置操作:

    $url = new Zend_View_Helper_Url();
    $this->setAction($url->url(array('controller'=> 'register','action'=>'index'),'default'));