【问题标题】:Form won't POST without Zend_Form没有 Zend_Form 表单不会发布
【发布时间】:2012-03-31 00:08:22
【问题描述】:

过去 2 天,我们(整个团队)一直在努力解决这个问题。出于某种奇怪的原因,我们的 Zend Framework 1.11.2 不允许我们将纯表单发布到控制器中,除非我们创建 Zend_Form 类。

视图文件中的 HTML(没有 javascript,什么都没有):

<html><body>
 <form action="/index/login/" method="post">            
    Email: <input type="text" name="email"/><br />
    Password: <input type="password" name="password" />
    <p><input type=submit name="ac" class="btn btn-success" value="Login"></p>
  </form></body></html>

索引控制器:

public function loginAction() 
{   
    $request = $this->getRequest();
    if ($request->getParam('email')) {
        Zend_Debug::dump($request);
    }
}

$request->getParams() 为空!

但如果我们创建一个 Zend_Form 或将字段作为 GET 传递,那么 $request->getParams() 将填充数据。

我只是不明白。 Zend 中是否有一些你必须关闭才能使用纯格式的东西?我们认为我们已经尝试了所有方法,访问了全局 $_POST 和 $_REQUEST 变量,并调用了 $request->getPost()。除非我们创建 Zend_Form 类并在控制器中实例化它,否则都是空的。

【问题讨论】:

  • 这很奇怪。这不应该是一个问题。您是否尝试过设置一个普通的 ZF 应用程序来查看是否可以发帖?否则我会检查你是否有任何 Zend_Controller_Plugins 在 predispatch 钩子中进行处理。
  • 使用交互式调试器时我们可以解决的问题数量之多很有趣。看看你的问题的性质,我很确定你和你的团队都没有使用调试器的习惯。我对吗? =P 我的意思是,不是 Zend_Debug::dump(),而是 Xdebug 或 Zend Debugger...
  • 我们单步调试调试器。我们正在使用 Xdebug 和 Eclipse PDT。什么都没有——纳达。空 $_POST。调试转储以防万一我们跨过某些东西。 :( 新鲜的 ZF 应用程序运行良好。我们只是想深入了解它,以防 Zend_Form 错过了它。
  • 您使用的是什么版本的 PHP?由于最近版本的错误修复,您可能会陷入对 PHP 和 ZF 所做的所有更改中。特别是如果你有一个修补过的 PHP 和一个旧版本的 ZF。需要考虑的事情。
  • ZF 无法知道纯 HTML 表单和 Zend_Form 之间的区别,所以我不确定问题出在哪里。如果您使用livehttpheadersWireshark 之类的工具,您会发现请求有什么奇怪的地方吗?

标签: php zend-framework zend-form


【解决方案1】:

您的表单操作似乎有问题。请使用 "baseUrl" View Helper 或 URL View Helper 创建正确的操作 url:

<?php
// correct action url

$actionURL = $this->url(array(
    'controller' => 'index',
    'action'     => 'login',
    'module'     => 'default',
));

?>

<html>
    <body>
        <form action="<?php echo $actionURL; ?>" method="post">            
            Email: <input type="text" name="email"/><br />
            Password: <input type="password" name="password" />
            <p><input type=submit name="ac" class="btn btn-success" value="Login"></p>
        </form>
    </body>

【讨论】:

  • 视图助手帮助您组织/格式化您的 URL。 $actionURL 会给你 /index/login - 和以前一样。我确实尝试了您的建议,以防万一它做的不仅仅是花哨的 URL。还是没有运气。
  • hum url helper alough 添加完整的“url”/index/login 结果只在localhost/index/login
【解决方案2】:

...将字段作为 GET 传递,然后 $request->getParams() 将填充数据。

由于您正在制作表单帖子,因此您需要使用getPost() 方法。

public function loginAction() 
{   
    if ($email = $this->_request->getPost('email')) {
        Zend_Debug::dump($email);
    }
}

【讨论】:

  • 试过了。 $request->getPost().
  • getRequest() 将同时访问 GET 和 POST 参数,但我更喜欢使用 getPost,因为这可以防止用户在 URL 中轻松注入某些参数。
【解决方案3】:

首先使用最新版本

Zend 框架 1.11.11

然后在 loginAction 中尝试这段代码

if($this->getRequest()->isPost())
{
print_r($this->_getAllParams());
}

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多