【问题标题】:How to pass POST variables with MVC?如何使用 MVC 传递 POST 变量?
【发布时间】:2011-12-31 20:29:08
【问题描述】:

我正在关注这个MVC guide 来学习使用 MVC 模式创建 Web 应用程序的基础知识。

我已经全部设置好了,它工作正常,目前系统使用这种形式的网址;

address.co.uk/controller/method/params

我知道这是如何工作的,但是在发布数据时这将如何工作?例如登录表单,我尝试从控制器访问 POST 变量,但是这不起作用,我猜这是由于 .htaccess 文件将所有内容都发送到 index.php?

更新:

所以我创建了这个基本形式;

    <form name="input" action="register/newuser" method="post">
    Username: <input type="text" name="user" />
    password: <input type="text" name="pass" />
    <input type="submit" value="Submit" />
    </form> 

向这个控制器方法newuser提交数据;

function newuser()
{
    $data['user'] = $_POST["user"];
    $data['pass'] = $_POST["pass"];
    $this->loadView('view_register_result',$data);
}

最后是结果页面;

<body>
    <h1>Result</h1>

    im not sure? <br />
    user: <?php echo $data['user']; ?>
    pass: <?php echo $data['pass']; ?>
</body>

这不起作用有什么原因吗?

【问题讨论】:

  • 我看不出任何代码与您的问题有什么关系
  • @您更新的问题:在字符串周围加上引号。 $data[user] 错了,应该是$data['user']。我不知道这是否解决了这个问题。另外:你确定你可以在你的模板中使用 PHP 吗?
  • 我已经解决了,谢谢,还没有解决问题,是的,PHP 似乎工作正常。
  • 我已经用一些新想法更新了我的答案。

标签: php model-view-controller


【解决方案1】:

$_POST 是一个超全局的,这意味着它无处不在。当然,除非您进行实际的 POST,否则它不会被填充。

.htaccess 中的mod_rewrite 只会重写URL,但不会触及$_POST$_SESSION$_COOKIE。只有$_GET 可能会稍作更改,但这超出了您的问题范围。

编辑
您的问题绝对与$_POST 无关。将$data 作为参数传递给loadView 是否将其作为$data 添加到模板中,还是将其作为两个单独的变量添加:user 和 pass?在这种情况下,请尝试loadView('..', array('data' =&gt; $data))

【讨论】:

  • 我认为这是有道理的,我已经更新了问题,因为它似乎不起作用!
【解决方案2】:

提交表单后,您仍在调用 MVC 模式中的控制器。这与任何页面相同。您可以使用控制器中的 $_POST 变量来获取该信息。您也可以使用 $_REQUEST 变量,因为它同时包含 Post 和 Get。

【讨论】:

    【解决方案3】:

    您的 POST 变量应该始终可以从 $_POST 超全局数组访问。如果您无法从那里检索值,可能是因为应用程序引导程序正在手动清空它(即强制使用专用库),或者请求中没有传递 POST 变量。

    无论哪种方式,我都鼓励您使用现有的 MVC 解决方案。

    (不过,重新发明轮子很适合玩耍和学习。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 2015-06-23
      相关资源
      最近更新 更多