10

最近、フォーム エラーの原因を突き止めました。

フォーム投稿を作成し、それらをループします

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フォームタグを使用する必要がありますか?

4

2 に答える 2

25

変化する

 $input = Input::all();

 $input = Input::except('_token');
于 2013-11-03T12:05:19.457 に答える
1

$update = Setting::find($key);有効なオブジェクトを返すことを確認してください。これは、$updateが NULL または定義されていない場合にエラーがトリガーされ、コードでこれを使用しようとしているからです。

$update->value = $value;

この警告は、システムでE_STRICTCreating default object from empty valueがオンになっている場合に発生しますが、これは実際の問題ではありません。代わりに、目的の結果が得られていません。ほとんどの場合、要求したものが得られず、代わりに新しいオブジェクトを作成している可能性があります。モデルを確認し、で正しい値を渡していることを確認してください。キーはキーでなければなりません。Setting::find($key)Setting::find($key)primary

更新: 使用するときも覚えておいてください

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

この場合、はフォームで使用される$key名前になり、非表示のフィールドがinput/field含まれている可能性がありますが、データベースでは として使用できない可能性があります。したがって、次を除くすべてを取得しようとする場合があります。_token_tokenfield/column_token

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

フィールドなしですべてを取得し_tokenます(ただし、これで問題が解決するかどうかはわかりません)。

于 2013-11-03T10:27:21.227 に答える