Heim >Backend-Entwicklung >PHP-Tutorial >Laravel Quick Tipp: Modellroutenbindung
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.
Kernpunkte:
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. 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
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.
(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!