如何用MVC传递POST变量?

时间:2011-12-31 20:29:09

标签: php model-view-controller

我正在关注此MVC guide,以了解使用MVC模式创建网络应用的基础知识。

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

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>

有什么理由不起作用吗?

3 个答案:

答案 0 :(得分:3)

$_POST是一个超全球化,意味着它随处可见。当然,除非你进行实际的POST,否则它不会被填充。

.htaccess中的

mod_rewrite只会重写网址,但不会触及$_POST$_SESSION$_COOKIE。只有$_GET可能会略有改变,但这超出了您的问题的范围。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

(重新发明轮子很酷,可以玩耍和学习。)