我的应用程序是在我的本地服务器的子目录中构建的,看起来像这样:
http://localhost/application/
问题在于,当我将表单操作设置为“/ form / save”时,表单路由到“localhost / form / save”,这不存在。
如果我将表单操作设置为“/ application / form / save”,则会出现错误,因为Zend使用其Front_Controller中的URL输入来选择要用于请求的模块,控制器和操作。
是否有一种简单的方法可以将base_url解析出来?由于某种原因,它除了表单之外的其他所有内容。
另一种选择是将base_url添加到所有表单操作中,以便您的应用程序可以在不同的环境中工作,然后在控制器收到操作时将其解析出来。
是否有一种简单的方法可以设置一个变量来做这样的事情,已经内置到Zend中? 如果没有,有什么解决方案?
我无法在任何地方找到解决此问题的任何内容。
答案 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'));