Kohana控制器中的$ _post

时间:2011-03-06 10:26:57

标签: forms post view controller kohana

我想知道如果控制器没有“控制”某个表单,我是否可以在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变量?谢谢!

3 个答案:

答案 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'];
}

这应该有效,因为我找不到任何其他错误