我想知道如果控制器没有“控制”某个表单,我是否可以在kohana控制器中获得带有$ _post的变量。
所以,如果我在视图中插入类似:
<form name="ordering" id="ordering" method="post" action="">
<input type="hidden" id="ordering" value="0">
<select id="ordering" name="ordering">
....
在控制器中我把:
$ordering = $_POST['ordering'];
但是给了我一个错误
或
if ($this->request->method == 'POST') {
$ordering = $_POST['ordering'];
}
但是在这种情况下它永远不会到达那里(在这堆代码中)。
所以我的问题是:如果控制器只处理一个表单,如何在控制器中检索$ _post变量?谢谢!
答案 0 :(得分:5)
Kohana 3.0:
if ($_POST)
{
$ordering = arr::get($_POST, 'ordering');
...
Kohana 3.1:
if ($ordering = $this->request->post('ordering')) // or just $this->request->post()
{
...
答案 1 :(得分:1)
如果您尝试访问未定义的数组元素,PHP将发出通知。 因此,如果从未提交“订购”表单,则尝试访问$ _POST ['ordering']将导致
PHP Notice: Undefined index: ordering in ...
Kohana的Arr课程提供了一个很好的辅助方法来解决这个问题。
如果你打电话
$ordering = Arr::get($_POST, 'ordering', 0);
它将从post变量中检索排序值。如果未设置$ _POST ['ordering'],它将返回第三个参数。然后,您可以尝试if ($ordering) ...
这对于$ _POST / $ _ GET数组或任何接受数组的函数都很有用 - 它允许您简明地指定回退行为,而不必使用isset
进行测试。
Kohana的一个优点是源代码往往非常干净且易于理解(这很好,因为文档很少。)我建议您查看Kohana_Arr类并查看方法可供使用!
答案 2 :(得分:1)
ID是独一无二的!使用类别insted或不同的ID。
您的表单和选择都已订购,将其中一个更改为其他内容,例如:
<form name="ordering_form" id="ordering_form" method="post" action="">
<input type="hidden" id="ordering_input" value="0">
<select id="ordering" name="ordering">
...
</select>
</form>
并在您的Kohana控制器中:
if( isset( $_POST['ordering'] ) )
{
$ordering = $_POST['ordering'];
}
这应该有效,因为我找不到任何其他错误