【问题标题】:Laravel foreach input all update fails because of form token由于表单令牌,Laravel foreach 输入所有更新失败
【发布时间】:2013-11-14 02:50:45
【问题描述】:

我最近发现了我的问题是什么导致了我的表单错误。

我创建一个表单帖子并循环遍历它们

public function update()
    {

        $input = Input::all();

        foreach ($input as $key => $value) {

            $update = Setting::find($key);
            $update->value = $value;
            $update->save();
        }

        return Redirect::back();
    }

问题是我收到以下错误

Creating default object from empty value

因为令牌包含在表单中,所以 Laravel 会自动呈现给表单

如果我停止使用 Laravel 表单打开并使用 html 表单标签,一切正常。

有什么办法可以绕过这个打开 laravel 表单还是应该使用 html 表单标签?

【问题讨论】:

    标签: php arrays forms laravel laravel-4


    【解决方案1】:

    确保您的 $update = Setting::find($key); 返回一个有效对象,因为,当 $update 为 NULL 或未定义并且您尝试在代码中使用它时应该触发该错误

    $update->value = $value;
    

    E_STRICT 在系统中打开时会出现此警告Creating default object from empty value,但这不是真正的问题,相反,您没有得到想要的结果,很可能Setting::find($key) 没有得到您要求的东西并创建一个新的Setting 对象,检查您的模型并确保您在::find($key) 中传递了正确的值,键应该是primary 键。

    更新: 还要记住,当你使用

    $input = Input::all();
    foreach ($input as $key => $value) { ... }
    

    在这种情况下,$key 将是您在表单中使用的input/field 的名称,它可能包含隐藏的_token 字段,但_token 可能在数据库中作为field/column 不可用。所以,你可以尝试获取除_token之外的所有东西

    $input = Input::except('_token'); // get everything without _token
    

    在没有_token 字段的情况下获取所有内容(但不确定这是否解决了问题)。

    【讨论】:

      【解决方案2】:

      改变

       $input = Input::all();
      

       $input = Input::except('_token');
      

      【讨论】:

      • 在 laravel 中有没有像 all 这样的方法,可以在没有 _token_method 的情况下检索所有需要的表单数据?或者我需要延长请求?
      猜你喜欢
      • 2020-11-03
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 2018-06-17
      • 1970-01-01
      • 2021-11-27
      相关资源
      最近更新 更多