Haben Sie jemals einen Controller erstellt, bei dem Sie viel Arbeit leisten mussten, um Variablen für die Übergabe an eine Ansicht vorzubereiten? Sie können diese Art von Arbeit in ein sogenanntes Ansichtsmodell verschieben. Im Wesentlichen handelt es sich bei Ansichtsmodellen um einfache Klassen, die einige Daten in etwas umwandeln, das für die Ansicht verwendbar ist.
Eine ausführlichere Erklärung und einige gute Beispiele finden Sie in diesem Blogbeitrag auf Stitcher.io.
Die nativen Ansichtskomponisten von Laravel stimmen nicht mit den in diesem Paket bereitgestellten Ansichtsmodellen überein. Um mehr über die Unterschiede zu erfahren, besuchen Sie diesen Blogbeitrag auf Stitcher.io.
Wir investieren viele Ressourcen in die Erstellung erstklassiger Open-Source-Pakete. Sie können uns unterstützen, indem Sie eines unserer kostenpflichtigen Produkte kaufen.
Wir freuen uns sehr, dass Sie uns eine Postkarte aus Ihrer Heimatstadt schicken und erwähnen, welches unserer Pakete Sie verwenden. Unsere Adresse finden Sie auf unserer Kontaktseite. Wir veröffentlichen alle erhaltenen Postkarten auf unserer virtuellen Postkartenwand.
Sie können das Paket über Composer installieren:
composer require spatie/laravel-view-models
Ein Ansichtsmodell ist eine Klasse, in die Sie eine komplexe Logik für Ihre Ansichten einfügen können. Dadurch werden Ihre Controller etwas leichter. Sie können ein Ansichtsmodell erstellen, indem Sie das bereitgestellte SpatieViewModelsViewModel
erweitern.
class PostViewModel extends ViewModel
{
public $ user ;
public $ post ;
public $ indexUrl = null ;
public function __construct ( User $ user , Post $ post = null )
{
$ this -> user = $ user ;
$ this -> post = $ post ;
$ this -> indexUrl = action ([PostsController::class, ' index ' ]);
}
public function post (): Post
{
return $ this -> post ?? new Post ();
}
public function categories (): Collection
{
return Category:: canBeUsedBy ( $ this -> user )-> get ();
}
}
Dann können Sie die View-Model-Klasse in Ihrem Controller wie folgt verwenden:
class PostsController
{
public function create ()
{
$ viewModel = new PostViewModel (
current_user ()
);
return view ( ' blog.form ' , $ viewModel );
}
public function edit ( Post $ post )
{
$ viewModel = new PostViewModel (
current_user (),
$ post
);
return view ( ' blog.form ' , $ viewModel );
}
}
In einer Ansicht können Sie Folgendes tun:
< input type = " text " value = " {{ $post -> title } } " />
< input type = " text " value = " {{ $post -> body } } " />
< select >
@foreach ( $categories as $category )
< option value = " {{ $category -> id } } " > {{ $category -> name } } </ option >
@endforeach
</ select >
< a href = " {{ $indexUrl } } " >Back</ a >
Alle öffentlichen Methoden und Eigenschaften in einem Ansichtsmodell werden automatisch für die Ansicht verfügbar gemacht. Wenn Sie nicht möchten, dass eine bestimmte Methode in Ihrer Ansicht verfügbar ist, können Sie sie ignorieren.
class PostViewModel extends ViewModel
{
protected $ ignore = [ ' ignoredMethod ' ];
/ / …
public function ignoredMethod () { / * … * / }
}
Alle in PHP integrierten magischen Methoden werden automatisch ignoriert.
Es ist möglich, ein Ansichtsmodell direkt von einem Controller zurückzugeben. Standardmäßig wird eine JSON-Antwort mit den Daten zurückgegeben.
class PostsController
{
public function update ( Request $ request , Post $ post )
{
/ / …
return new PostViewModel ( $ post );
}
}
Dieser Ansatz kann bei der Arbeit mit über AJAX übermittelten Formularen nützlich sein.
Es ist auch möglich, eine Ansicht direkt zurückzugeben:
class PostsController
{
public function update ( Request $ request , Post $ post )
{
/ / …
return ( new PostViewModel ( $ post ))-> view ( ' post.form ' );
}
}
Beachten Sie, dass dieser Ansatz auch JSON-Daten anstelle einer gerenderten Ansicht zurückgibt, wenn der Content-Type
-Header der Anfrage auf JSON festgelegt ist.
Ansichtsmodelle können Funktionen verfügbar machen, die zusätzliche Parameter erfordern.
class PostViewModel extends ViewModel
{
public function formatDate ( Carbon $ date ): string
{
return $ date -> format ( ' Y-m-d ' );
}
}
Sie können diese Funktionen in der Ansicht wie folgt verwenden:
{{ $ formatDate ( $post -> created_at ) } }
Das Paket enthielt einen Handwerkerbefehl zum Erstellen eines neuen Ansichtsmodells.
php artisan make:view-model HomepageViewModel
Dieses Ansichtsmodell hat den Namespace AppViewModels
und wird in app/ViewModels
gespeichert.
oder in einen benutzerdefinierten Namespace, beispielsweise AppBlog
php artisan make:view-model " Blog/PostsViewModel "
Dieses Ansichtsmodell hat den Namespace AppBlogViewModels
und wird in app/Blog/ViewModels
gespeichert.
Weitere Informationen zu den letzten Änderungen finden Sie im CHANGELOG.
Weitere Informationen finden Sie unter BEITRAGEN.
Wenn Sie einen Sicherheitsfehler gefunden haben, senden Sie bitte eine E-Mail an [email protected], anstatt den Issue-Tracker zu verwenden.
Die MIT-Lizenz (MIT). Weitere Informationen finden Sie in der Lizenzdatei.