wake-up-neo.com

Wie benutze ich die Patch-Anfrage in Laravel?

Es gibt eine Entität User, die in der Tabelle Users angegeben ist.

Einige Felder in dieser Tabelle sind standardmäßig null. 

Ich muss diese Felder aktualisieren und keine Nulldaten festlegen.

Dafür versuche ich, die Methode PATCH in Laravel zu verwenden:

Routing:

Route::patch('users/update', '[email protected]');

Controller:

public function update(Request $request, $id)
    {
        $validator = Validator::make($request->all(), [
            "name" => 'required|string|min:3|max:50',
            "email_work" => 'email|max:255|unique:users',
            "surname" => 'required|string|min:3|max:50',
            "tel" => 'required|numeric|size:11',
            "country" => 'required|integer',
            "region" => 'required|integer',
            "city" => 'required|integer'
        ]);

        if ($validator->fails()) {
            return response()->json(["message" => $validator->errors()->all()], 400);
        }

        $user = User::where("user_id", $id)->update([
            "name" => $request->name,
            "surname" => $request->surname,
            "tel" => $request->tel,
            "country" => $request->country,
            "city" => $request->city,
            "region" => $request->region,
            "email_work" => $request->email
        ]);

        return response()->json(["user" => $user]);

    }

Bedeutet das, dass ich Daten zur Aktualisierung übergeben kann? Soll ich $id-Parameter relativ zu Routing und Controller übergeben?

Wie verwende ich den rechten Handler für die PATCH-Methode in Laravel?

8
Darama

ihre Route ist:

Route::patch('users/update', '[email protected]');

ersetzen Sie Ihre Route durch die folgende Route, die für alle CRUD-Operationen verwendet wird:

Route::resource('users', 'UsersController');

wenn Sie ajax zum Übermitteln von Daten verwenden, ersetzen Sie Typ und URL durch Folgendes:

type: "patch",
url: "{{url('/')}}users/" + id,

wenn Sie ajax nicht verwenden, verwenden Sie Folgendes:

<form method="POST" action="{{url('/')}}users/".$id>
    {{csrf_field()}}
    {{ method_field('PATCH') }}
</form>

update: Nach Version 5.6 können Sie diese Syntax für die oben genannten Funktionen in einer beliebigen Blade-Datei verwenden:

<form method="POST" action="{{url('/')}}users/".$id>
    @csrf
    @method('PATCH')
</form>
27

Ja, Sie müssen eine ID für den Routenpatch senden. Beispiel aus https://laravel.com/docs/5.4/controllers#resource-controllers für Laravel 

PUT/PATCH -/photos/{photo}, damit Sie kein update Word für Ihre Route benötigen. Nur Benutzer/ID und Methoden PUT oder PATCH.

UPD für CRUD-Operationen:

// Routes
Route::resource('items', 'ItemsController');

// Form for update item with id=1
<form method="POST" action="{{ route('items.update', ['id' => 1])}}">
    {!! csrf_field() !!}
    <input name="_method" type="hidden" value="PATCH">
    <!-- Your fields here -->
</form>

// Controller
public function update($id, Request $request)
{
    // Validation here

    $item = Item::findOrFail($id);

    // Update here
}
1
aleksejjj

Aktualisieren Sie das Routing wie unten beschrieben 

Route::patch('/users/update/{id}',[
    'uses' => '[email protected]'
]);
1
Pramod Patil