web-dev-qa-db-ja.com

Laravel 5.1空の値からデフォルトのオブジェクトを作成する

Laravel 5.1 PHP frameworkを使用しています。レコードを更新しようとすると、次のエラーが表示されます:

「AdminController.php行108のErrorException:空の値からデフォルトオブジェクトを作成しています」.

Googleで検索しましたが、問題を解決する結果が見つかりません。

ルート

Route::get('/admin/no', 'AdminController@index');
Route::get('/admin/product/destroy/{id}', 'AdminController@destroy');
Route::get('/admin/new', 'AdminController@newProduct');
Route::post('/admin/product/save', 'AdminController@add');
Route::get('/admin/{id}/edit', 'AdminController@edit');
Route::patch('/admin/product/update/{id}', 'AdminController@update')

AdminController

 public function edit($id)
    {

        $product = Product::find($id);
        return view('admin.edit', compact('product'));

    }

    public function update(Request $request, $id)
    {

        $product = Product::find($id);
        $product->id = Request::input('id');
        $product->name = Request::input('name');
        $product->description = Request::input('description');
        $product->price = Request::input('price');
        $product->imageurl = Request::input('imageurl');


        $product->save();
        //return redirect('/admin/nο');

    }
    enter code here

edit.blade.php

div class="panel panel-info">
        <div class="panel-heading">
            <div class="panel-title">Edit Product</div>
        </div>
        <div class="panel-body" >
            <form action="/admin/product/update/{id}" method="POST"><input type="hidden" name="_method" value="PATCH"> <input type="hidden" name="_token" value="{{ csrf_token() }}">
    enter code here
7
Kristin K

問題は、$product = Product::find($id);NULLを返すことです。チェックを追加します。

if(!is_null($product) {
   //redirect or show an error message    
}

これは更新メソッドですが、このメソッドのURLの構築中にエラーが発生している可能性があります。このルートに渡すIDが間違っている可能性があります。

フォームactionにエラーがあります:

<form action="/admin/product/update/{id}" method="POST">

中括弧に注意してください。Bladeの構文は{{ expression }}ではなく{}です。したがって、idproduct.updateルートに渡されることはありません。それを次のように変更してください:

<form action="/admin/product/update/{{$id}}" method="POST">
6
Ivanka Todorova

laravelでエンティティを更新する場合[〜#〜] put [〜#〜]メソッドを使用しない[〜#〜] post [〜#〜]。フォームメソッドを更新して試してください。

<form action="/admin/product/update/{id}">

<input name="_method" type="hidden" value="PUT">
1
Hiren Makwana

製品が存在するかどうかを確認し、更新を実行しますフォームは次のようになります

<form action="/admin/product/update/{{$id}}" method="POST">

$記号がありませんでした :)

0
Samvedna