【问题标题】:$_post in Kohana controllerKohana 控制器中的 $_post
【发布时间】:2011-03-06 10:26:57
【问题描述】:

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

【问题讨论】:

  • 我相信你可以得到你想要的,而不会以错误的方式去做。 =]

标签: forms post view controller kohana


【解决方案1】:

Kohana 3.0:

if ($_POST)
{
$ordering = arr::get($_POST, 'ordering');
...

Kohana 3.1:

if ($ordering = $this->request->post('ordering')) // or just $this->request->post()
{
...

【讨论】:

  • 我使用的是 kohana 3.0。我尝试了代码,但是如果我尝试使用视图中的 $ordering 变量,它就不起作用了。(我得到一个未定义的变量错误)...
  • @dana 你有提交按钮之类的吗?否则 $ordering 不存在
  • @dana 如果您不打算在检查帖子之前设置变量,请在设置视图变量时使用 bind()(而不是 set())
【解决方案2】:

如果您尝试访问未定义的数组元素,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 类并查看方法可用!

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • HTML 元素 ID 与 $_POST 无关,而是名称。在这种情况下,name="ordering" 的最后一个元素的值将被提交,尽管是重复的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    相关资源
    最近更新 更多