我正在关注此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>
有什么理由不起作用吗?
答案 0 :(得分:3)
$_POST
是一个超全球化,意味着它随处可见。当然,除非你进行实际的POST,否则它不会被填充。
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解决方案。
(重新发明轮子很酷,可以玩耍和学习。)