【问题标题】:How do you restore the values of the form in case if validation failed (in Kohana 3)如果验证失败,如何恢复表单的值(在 Kohana 3 中)
【发布时间】:2012-03-07 10:07:39
【问题描述】:

官方文档底部有示例http://kohanaframework.org/3.2/guide/kohana/security/validation

但显然,只要在 View 中使用 $post['username'],它就不会在请求中工作,但 $post 数组在第一次请求时为空。

那么在这种情况下如何恢复这些值?有什么通用的解决方案吗?

PS:是的,我知道我可以做到isset($post['username']) ? $post['username'] : '';,但这很烦人

【问题讨论】:

  • 我不熟悉框架,但为什么不将值存储在会话中?
  • @Paul:因为没有意义 - 将已经在一个超全局 $_POST 中的数据移动到另一个超全局 $_SESSION
  • @zerkms 大多数人可能只是按照示例并通过将error_reporting 设置更改为E_ALL ^ E_NOTICE 之类的设置来忽略通知警告。
  • @Kemal Fadillah:抑制任何类型的消息(警告和通知)总是会导致代码调试困难。编写一个不会引发任何错误的代码要容易得多。
  • @zerkms - 抱歉,我误解了你的问题。

标签: php kohana kohana-3


【解决方案1】:

我只是在查看 Building and Validating a Form 上的旧文档。

从示例代码中可以看出,首先需要初始化一个以表单字段名称为键的数组,并将值设置为空字符串。如果有错误,请填写每个元素的值。在视图中,您可以简单地调用Form::input(),而无需任何if 语句或某种形式。

我猜 Kohana 从一开始就是这样构建的。而且它似乎没有改变。您可能只需要做同样的事情。

【讨论】:

    【解决方案2】:

    我使用Arr::get函数:

    echo Form::input('name', Arr::get($post, 'name'))
    

    【讨论】:

      【解决方案3】:

      我使用模型在表单中显示数据。这样表单的初始值就是模型中的初始值。

      然后我在控制器中用 POST 数据更新模型数据,如果有验证错误,模型数据将包含 POST 数据。这意味着我不必在视图中放置任何条件逻辑,我只需:Form::input('name', $model->name)

      以下是对这种方法的更详细说明:Kohana ORM and Validation, having problems

      【讨论】:

      • 这很好,除非您的视图中有依赖于模型值的代码。在您的情况下,模型将分配新值,因此依赖代码的行为可能会有所不同。
      • 我视图中的代码完全取决于模型值,这正是我想要的,因为我正在更新模型。如果我有其他依赖代码,我将使用不同的加载模型。
      • 我的意思是经常需要在 POST 和模型数据之间进行拆分。假设您有一个仅在模型status 属性设置为“打开”时可见的按钮。如果您想将status 设置为“关闭”但验证失败,则该按钮将被隐藏,尽管您希望它可见。
      • 不确定我是否完全理解您的示例,但我不否认存在独特的用例。我认为,如果您要更新模型,则很少需要区分模型数据和 POST 数据。
      • +1 因为这种方法还让您只有一个操作和一个视图来创建新记录和编辑现有记录。我将我的操作命名为“编辑”,它编辑新的或现有的记录,它是一样的,你只需执行 $model = ORM::factory('model', $this->request->param('id')); 并且如果 URL 中没有 ID,Request::param() 方法返回 NULL 并且 ORM 给你一个空模型来创建新记录。
      猜你喜欢
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多