Ich habe eine URL wie /locations/name-of-the-location.ID
Laravel: Überprüfen Sie, ob Slug in einer Route gleich in der Datenbank Slug
Mein Weg ist:
Route::get('locations/{slug}.{location}', ['as' => 'locations.show', 'uses' => '[email protected]'])->where([
'location' => '[0-9]+',
'slug' => '[a-z0-9-]+'
]);
Jetzt will ich prüfen, ob die vorgesehenen Schnecke die gleiche ist das ist in der Datenbankspalte 'Slug' mit meinem Modell gespeichert (weil der Slug sich vielleicht geändert hat). Wenn nicht, dann möchte ich auf den richtigen Pfad umleiten.
Wo ist der beste Ort dafür? Ich dachte an \ App \ Providers \ RouteServiceProvider- aber wenn ich versuche, dort Route::currentRouteName()
zu verwenden, bekomme ich NULL, vielleicht weil es zu früh für diese Methode in der Boot() Methode von RouteServiceProvider ist.
Was ich tun könnte, ist mit dem Pfad() arbeiten, aber das scheint mir ein bisschen schmutzig, weil ich mit Routenpräfixe in einer anderen Sprache arbeite.
Hier ist, was ich versuchte (ich eine kleine Helfer Klasse RouteSlug
verwenden) - natürlich funktioniert es nicht:
public function boot()
{
parent::boot();
if (strstr(Route::currentRouteName(), '.', true) == 'locations')
{
Route::bind('location', function ($location) {
$location = \App\Location::withTrashed()->find($location);
$parameters = Route::getCurrentRoute()->parameters();
$slug = $parameters['slug'];
if ($redirect = \RouteSlug::checkRedirect(Route::getCurrentRoute()->getName(), $location->id, $location->slug, $slug))
{
return redirect($redirect);
}
else
{
return $location;
}
});
}
}
, warum dies nicht in show' setzen 'LocationsController @? – upful
Ich benutze auch die Slug on Bearbeiten, zerstören und andere Methoden. Ich habe auch Schnecken in anderen Controllern, also möchte ich alle Weiterleitungen an einem Ort verwalten. – sugo
Warum das Rad neu erfinden? https://github.com/cviebrock/eloquent-sluggable – ceejayoz