Heim > Backend-Entwicklung > PHP-Tutorial > Laravel Quick Tipp: Modellroutenbindung

Laravel Quick Tipp: Modellroutenbindung

Christopher Nolan
Freigeben: 2025-02-10 11:35:12
Original
1003 Leute haben es durchsucht

Laravel Routing -Komponente: Vereinfachen und effiziente Routing -Management

In diesem Artikel wird die leistungsstarke Routing -Komponente von Laravel erörtert, die einfache und effiziente Routing -Management -Methoden bietet und einfache URLs, Parameter, Gruppen, Benennung und Ereignisschutz von Routing -Gruppen unterstützt. Die Funktion der Routing -Modellbindungsfunktion vereinfacht die Verarbeitung von sich wiederholenden Aufgaben, indem sie den Modellnamen anstelle des ID -Parameters auffordert.

Laravel Quick Tip: Model Route Binding

Kernpunkte:

    Die Routing -Komponente von
  • Laravel bietet einfache und effiziente Routing -Management -Methoden, die einfache URLs, Parameter, Gruppen, Benennung und Ereignisschutz -Routing -Gruppen unterstützen. Die Routing -Modellbindungsfunktion vereinfacht die sich wiederholende Aufgabenverarbeitung, indem sie den Modellnamen und nicht die ID -Parameter auffordert.
  • Die Routing -Modellbindung von
  • Laravel analysiert das Modell automatisch mit ID -Parametern und bringt eine Ausnahme aus, wenn das Modell nicht vorhanden ist. Die Methode App\Exceptions\Handler@render ist für die Konvertierung der Ausnahme in eine HTTP -Antwort verantwortlich und kann verwendet werden, um ModelNotFoundException zu verarbeiten und auf eine 404 -Seite umzuleiten.
  • laravel ermöglicht eine benutzerdefinierte Routing -Modellbindung, wie z. Dies hilft zu vermeiden, interne IDs dem Endbenutzer auszusetzen. getRouteKeyName

Beispiel: Backend -Kategorie verwalten

Angenommen, es gibt eine Reihe von Kategorien in der Datenbank, die Administratoren im Hintergrund verwalten können. Die Routing -Datei lautet wie folgt:

Die
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin'], function () {
    Route::resource('categories', 'CategoriesController');
});
Nach dem Login kopieren
Nach dem Login kopieren

Klasse enthält sieben Ressourcenmethoden. In der CategoriesController -Operation müssen Sie überprüfen, ob die zu bearbeitende Kategorie in der Datenbank vorhanden ist. Andernfalls wird eine Fehlermeldung zurückgegeben und umgeleitet: edit

public function edit($id)
{
    $category = Category::find($id);
    if (!$category) {
        return redirect()->route('admin.categories.index')->withErrors([trans('errors.category_not_found')]);
    }

    // ...
}
Nach dem Login kopieren
Nach dem Login kopieren

Routing -Modellbindung

Dies ist eine gängige Praxis, aber Laravel bietet eine optimiertere Art und Weise, wie Routing -Modellbindung. Geben Sie einfach den Modellnamen ein, es sind keine ID -Parameter erforderlich.

Die verfügbare Routenliste lautet wie folgt:

<code>+--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+
| Domain | Method    | URI                                | Name                               | Action                                                               | Middleware      |
+--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+
|        | GET|HEAD  | admin/categories                   | admin.categories.index             | App\Http\Controllers\Admin\CategoriesController@index                | web,admin       |
|        | POST      | admin/categories                   | admin.categories.store             | App\Http\Controllers\Admin\CategoriesController@store                | web,admin       |
|        | GET|HEAD  | admin/categories/create            | admin.categories.create            | App\Http\Controllers\Admin\CategoriesController@create               | web,admin       |
|        | GET|HEAD  | admin/categories/{categories}      | admin.categories.show              | App\Http\Controllers\Admin\CategoriesController@show                 | web,admin       |
|        | PUT|PATCH | admin/categories/{categories}      | admin.categories.update            | App\Http\Controllers\Admin\CategoriesController@update               | web,admin       |
|        | DELETE    | admin/categories/{categories}      | admin.categories.destroy           | App\Http\Controllers\Admin\CategoriesController@destroy              | web,admin       |
|        | GET|HEAD  | admin/categories/{categories}/edit | admin.categories.edit              | App\Http\Controllers\Admin\CategoriesController@edit                 | web,admin       |</code>
Nach dem Login kopieren
Routing -Parameter sind

, die bei Bedarf geändert werden können. Laravel bietet eine Option, um es zu ändern: {categories}

Route::resource('categories', 'CategoriesController', [
    'parameters' => 'singular',
]);
Nach dem Login kopieren
modifizierte Route:

<code>+--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+
| Domain | Method    | URI                                | Name                               | Action                                                               | Middleware      |
+--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+
|        | GET|HEAD  | admin/categories                   | admin.categories.index             | App\Http\Controllers\Admin\CategoriesController@index                | web,admin       |
|        | POST      | admin/categories                   | admin.categories.store             | App\Http\Controllers\Admin\CategoriesController@store                | web,admin       |
|        | GET|HEAD  | admin/categories/create            | admin.categories.create            | App\Http\Controllers\Admin\CategoriesController@create               | web,admin       |
|        | GET|HEAD  | admin/categories/{category}        | admin.categories.show              | App\Http\Controllers\Admin\CategoriesController@show                 | web,admin       |
|        | PUT|PATCH | admin/categories/{category}        | admin.categories.update            | App\Http\Controllers\Admin\CategoriesController@update               | web,admin       |
|        | DELETE    | admin/categories/{category}        | admin.categories.destroy           | App\Http\Controllers\Admin\CategoriesController@destroy              | web,admin       |
|        | GET|HEAD  | admin/categories/{category}/edit   | admin.categories.edit              | App\Http\Controllers\Admin\CategoriesController@edit                 | web,admin       |</code>
Nach dem Login kopieren

Hinweis: Laravel 5.3 verwendet standardmäßig die Singularform.

public function edit(Category $category)
{
    return view('admin.categories.edit', [
        'category'      => $category
    ]);
}
Nach dem Login kopieren
laravel wird nun die Kategorie automatisch mit dem ID -Parameter analysieren und eine Ausnahme auswerfen, wenn das Modell nicht vorhanden ist.

Hinweis: Wenn der Parameter keinen Standardwert hat, wird die eloquente Methode zur Analyse der Parameter verwendet. findOrFail

Ausnahmebehandlung Die Methode

ist für die Konvertierung von Ausnahmen in HTTP -Antworten verantwortlich. Wir werden es verwenden, um App\Exceptions\Handler@render zu verarbeiten und auf die 404 -Seite umzuleiten. ModelNotFoundException

Diese Methode hat die Parameter

und request, mit der die zur Durchführung der Aktion bestehende Aktion bestimmen kann. exception

Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin'], function () {
    Route::resource('categories', 'CategoriesController');
});
Nach dem Login kopieren
Nach dem Login kopieren

Wir testen, ob die geworfene Ausnahme eine Instanz von ModelNotFoundException ist. Wir können den Modellnamen auch testen, um die richtige Fehlermeldung anzuzeigen. Um zu vermeiden, dass alle Modelle mehrere if -Tests hinzugefügt werden, können wir ein Array von indizierten Nachrichten erstellen und mit dem Modellklassenname die richtigen Nachrichten extrahieren.

Parameteranalyse

Laravel verwendet Namen und Typ -Tipps, um Routing -Parameter aufzulösen. Wenn der Parametertyp ein Modell ist, versucht er, Datensätze in der Datenbank mithilfe der ID nachzuschlagen, und fällt fehl, wenn der Datensatz nicht gefunden werden kann.

Benutzerdefinierte Routing -Schlüssel

Um zu vermeiden, dass interne IDs Endbenutzern ausgesetzt werden, werden normalerweise UUIDs verwendet. Da Laravel jedoch Tabellen -Primärschlüssel verwendet, um gebundene Parameter zu analysieren, wird immer ein Fehler geworfen!

, um dies zu tun, ermöglicht es uns Laravel, die getRouteKeyName -Methode der übergeordneten Modellklasse neu zu schreiben. Diese Methode sollte den Eigenschaftsnamen in diesem Fall uUid zurückgeben.

public function edit($id)
{
    $category = Category::find($id);
    if (!$category) {
        return redirect()->route('admin.categories.index')->withErrors([trans('errors.category_not_found')]);
    }

    // ...
}
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir nun versuchen, eine bestimmte Kategorie mit UUID zu bearbeiten, sollte sie wie erwartet funktionieren, z.

Laravel Quick Tip: Model Route Binding

FAQs auf Laravel Routing -Modellbindung

(Dieser Teil des Inhalts wurde im Originaltext ausführlich beantwortet und wird hier nicht beschrieben) Ich hoffe, der obige Inhalt wird Ihnen hilfreich sein!

Das obige ist der detaillierte Inhalt vonLaravel Quick Tipp: Modellroutenbindung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage