【问题标题】:Laravel Former input field posted with empty value shows old (original) value instead of empty input field使用空值发布的 Laravel 前输入字段显示旧(原始)值而不是空输入字段
【发布时间】:2014-07-04 13:02:32
【问题描述】:

我在使用 Laravel 的Former 插件来处理表单和字段时遇到了一些问题。

用例是给定模型的“编辑”表单。

Former::text('title')
  ->label('Title')
  ->value( $title );

Former::text('description')
  ->label('Description')
  ->value( $description );

规则:

  • 标题必须始终存在且长度至少为 10 个字符。
  • 说明可能为空。

预期行为:

加载编辑表单时,我希望表单在字段中显示$title$description 的值。

每当提交包含无效字段值的表单时,我希望提交的值会显示在字段中,而不是 $title$description 的值。

问题:

这仅在提交非空字符串时有效!

当提交一个空字符串时,它就像Former处理它一样,甚至还没有提交,因此使用$title$description给出的值来代替。

我认为Former 能够做到这一点“聪明”,并且仅当发布的数据不包含该字段时才采用value($variable) 值。但是当提交为空时,Former 似乎也在获取变量值。

为什么会出现这个问题?

假设您编辑了这两个字段,并且实际上想要更改 title 并完全删除 description,根据规则这是有效的。然后,因为你输入了一个太短的title,验证没有通过,title 将得到新的(太短的)title 作为字段值,而description 值将回退到该值$description 变量,而不是显示已发布的空字段。

感觉就像$_POST['description'] = "" 被视为$_POST['description'] = nullnot set - 即使空字段是帖子的一部分。

【问题讨论】:

    标签: laravel


    【解决方案1】:

    在你看来

    //replace
    Former::text('title')
    ->label('Title')
    ->value( $title );
    
    //with
    Former::text('title')
    ->label('Title')
    

    ...在你的控制器中

    //add  
    Former::populate($model);
    

    $model 正在讨论有问题的模型 :) $model->title 必须存在且与原始代码中的 $title 具有相同的值。

    如果将 ->value($somevalue) 与Former 一起使用,将始终使用$somevalue。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多