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

Laravel Quick Tipp: Modellroutenbindung

Christopher Nolan
Christopher NolanOriginal
2025-02-10 11:35:12922Durchsuche

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
<code class="language-php">Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin'], function () {
    Route::resource('categories', 'CategoriesController');
});</code>

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

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

    // ...
}</code>

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>
Routing -Parameter sind

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

<code class="language-php">Route::resource('categories', 'CategoriesController', [
    'parameters' => 'singular',
]);</code>
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>

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

<code class="language-php">public function edit(Category $category)
{
    return view('admin.categories.edit', [
        'category'      => $category
    ]);
}</code>
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

<code class="language-php">Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin'], function () {
    Route::resource('categories', 'CategoriesController');
});</code>

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.

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

    // ...
}</code>

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!

Stellungnahme:
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