1

我的应用程序正在本地服务器的子目录中构建,如下所示:

http://localhost/application/

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

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

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

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

有没有一种简单的方法来设置一个变量来做这样的事情,已经内置在 Zend 中了?如果没有,有什么解决办法?

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

4

3 回答 3

4

该问题是由在操作中包含初始斜线引起的。当你设置一个带有根相对链接的链接时,当目的锚点在同一个域名下时,就相当于设置了一个绝对链接。(“/form/save”等价于“ http://localhost/form/save ”)。

在您的情况下,如果您想将数据发送到不同的控制器/操作,听起来您需要向表单添加一个基本 URL。您正在使用Zend_Form(对吗?),最优雅的解决方案是 subclass 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 都会自动包含在内。

希望这可以帮助。

于 2009-10-29T16:31:43.307 回答
0

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

于 2009-10-28T23:16:52.930 回答
0

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

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

    $url = new Zend_View_Helper_Url();
    $this->setAction($url->url(array('controller'=> 'register','action'=>'index'),'default'));
于 2011-03-17T04:26:53.033 回答