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

http://localhost/application/

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

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

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

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

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

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

有帮助吗?

解决方案

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

在您的情况下,如果您想将数据发送到其他控制器/操作,则听起来需要向表单添加基本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'));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top