Laravel: Access-Modell-Instanz im Formular-Anfrage bei Verwendung von Route/Modell-Bindung
Habe ich eine route/Modell verbindlich eingerichtet in meinem Projekt für eines meiner Modelle, und das funktioniert Prima. Ich bin in der Lage, zu verwenden, meine Bindung in meine route Weg und nimmt eine Instanz von meinem Modell als parameter zu der entsprechenden Methode in meinem controller.
Nun bin ich versucht zu tun, einige arbeiten mit diesem Modell, so habe ich eine Methode in meinem controller, akzeptiert ein Formular Anfordern, so kann ich einen Teil der Validierung.
public function edit(EditBrandRequest $request, Brand $brand)
{
//...
Jede andere Instanz von meinem Modell kann überprüft werden, unterschiedlich, so dass ich im Stande sein müssen, verwenden Sie eine Instanz des Modells, um einen benutzerdefinierten Satz von Validierungs-Regeln.
Ist es ein Weg, um die Instanz des Modells, die eingespritzt wird, in den controller von der Form Verlangen?
Ich habe versucht, type-hinting-Modell-Instanz in der Form Request-Konstruktor
class EditBrandRequest extends Request
{
public function __construct(Brand $brand)
{
dd($brand);
}
Ich haben auch versucht, die type-hinting-Modell-Instanz in der Form Anfrage rules()
Methode.
class EditBrandRequest extends Request
{
//...
public function rules(Brand $brand)
{
dd($brand);
In beiden Fällen bin ich zur Verfügung gestellt eine leere/neue Instanz des Modells, sondern als die Instanz, die ich erwarte.
Natürlich, ich konnte immer dies umgehen, indem nicht die Mühe mit dem Formular Anfragen und generieren Sie einfach die Regeln in der Steuerung und manuell zu validieren - aber ich würde lieber tun es die Laravel Weg wenn es möglich ist.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einfach den Zugriff auf die binding-Taste, so zum Beispiel, wenn Sie binden
Brand
Modell:$router->model('brand', '\App\Brand')
können Sie bekommen Instanz des Modells mit$this->brand
. Hier ist Validierungsregeln Beispiel:BEARBEITEN
Manchmal müssen Sie möglicherweise eine input-Namen, die den gleichen Namen verwendet wie die binding-Taste, wenn Sie zum Beispiel binden
Address
Modell alsaddress
dann haben Sie ein Eingabefeldaddress
es wird Laravel verwirren. Für diese situation können Sieroute()
Methode.routes/*.php
aber der richtige Weg, um register ein-Bindung in dieboot
Methode derRouteServiceProvider.php
e.gRoute::model('user', App\User::class)
oderRoute::bind('username', function ($username) { return User::where('username', '=', $username)->firstOrFail(); });
- Siehe: laravel.com/docs/5.6/routing#route-model-binding