Zend framework Zend_表单集操作-它能与Zend应用程序内置子目录一起工作吗?

Zend framework Zend_表单集操作-它能与Zend应用程序内置子目录一起工作吗?,zend-framework,zend-form,base-url,Zend Framework,Zend Form,Base Url,我的应用程序是在本地服务器的子目录中构建的,看起来像这样: http://localhost/application/ 问题是,当我将表单操作设置为/form/save时,表单路由到localhost/form/save,而localhost/form/save并不存在 如果我将表单操作设置为/application/form/save,则会出现一个错误,因为Zend使用其前端控制器中的URL输入来选择用于请求的模块、控制器和操作 有没有一种简单的方法可以从请求中解析出基本url?出于某种原因

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

http://localhost/application/
问题是,当我将表单操作设置为/form/save时,表单路由到localhost/form/save,而localhost/form/save并不存在

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

有没有一种简单的方法可以从请求中解析出基本url?出于某种原因,它可以作用于除表单之外的所有其他内容

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

有没有一种简单的方法可以设置一个变量来执行类似于Zend中已经内置的操作? 如果不是,解决方案是什么


我似乎在任何地方都找不到任何解决此问题的方法。

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

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

此问题是由于在操作中包含初始斜杠引起的。当您使用根相对链接设置链接时,相当于在目标锚点位于同一域名下时设置绝对链接/表单/保存相当于

在您的情况下,如果要将数据发送到其他控制器/操作,听起来您需要向表单添加一个基本URL。您使用的是Zend_Form,对吗?最优雅的解决方案是将Zend_Form子类化,覆盖setAction方法,将您的基本URL预先添加到您设置的每个操作

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,都会自动包含基本URL


希望这有帮助。

问题是由于在操作中包含初始斜杠引起的。当您使用根相对链接设置链接时,相当于在目标锚点位于同一域名下时设置绝对链接/表单/保存相当于

在您的情况下,如果要将数据发送到其他控制器/操作,听起来您需要向表单添加一个基本URL。您使用的是Zend_Form,对吗?最优雅的解决方案是将Zend_Form子类化,覆盖setAction方法,将您的基本URL预先添加到您设置的每个操作

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,都会自动包含基本URL


希望这能有所帮助。

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

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

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

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

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

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