Dieses Paket wurde aufgegeben
Ansichtskomponenten sind eine Möglichkeit, die an die Ansicht gebundene Logik zu organisieren, ähnlich wie Ansichtskomponisten.
namespace App Http ViewComponents ;
use Illuminate Http Request ;
use Illuminate Contracts Support Htmlable ;
class NavigationComponent implements Htmlable
{
/** IlluminateHttpRequest */
private $ request ;
/** @var string */
private $ backgroundColor ;
public function __construct ( Request $ request , string $ backgroundColor )
{
$ this -> request = $ request ;
$ this -> backgroundColor = $ backgroundColor ;
}
public function toHtml (): string
{
return view ( ' components.navigation ' , [
' activeUrl ' => $ this -> request -> url (),
' backgroundColor ' => $ this -> backgroundColor ,
]);
}
}
@render ( ' navigationComponent ' , [ ' backgroundColor ' => ' black ' ] )
Eine Ansichtskomponente kann alles sein, was den Htmlable
-Vertrag von Laravel implementiert, sodass Sie zum Rendern der Komponente nicht unbedingt Blade-Ansichten verwenden müssen. Dies ist nützlich, um HTML-Pakete von Drittanbietern wie spatie/laravel-menu zu verpacken.
namespace App Http ViewComponents ;
use Illuminate Contracts Support Htmlable ;
use Illuminate Contracts Auth Guard ;
use Spatie Menu Laravel Menu ;
class MainMenuComponent implements Htmlable
{
/** @var IlluminateContractsAuthGuard */
private $ guard ;
/** @var string */
private $ class ;
public function __construct ( Guard $ guard , string $ class = null )
{
$ this -> guard = $ guard ;
$ this -> class = $ class ;
}
public function toHtml (): string
{
$ menu = Menu:: new ()
-> addClass ( $ this -> class )
-> url ( ' / ' , ' Home ' )
-> url ( ' /projects ' , ' Projects ' );
if ( $ this -> guard -> check ()) {
$ menu -> url ( ' /admin ' , ' Adminland ' );
}
return $ menu ;
}
}
@render ( ' mainMenuComponent ' , [ ' class ' => ' background-green ' ] )
Der Vorteil gegenüber Ansichtskomponisten besteht darin, dass Daten und Rendering-Logik in Komponenten explizit miteinander verknüpft werden, anstatt erst nachträglich verbunden zu werden. Sie ermöglichen Ihnen auch die nahtlose Kombination von Eigenschaften und Abhängigkeitsinjektion.
Dieses Paket basiert auf Introducing View Components in Laravel, einer Alternative zu View Composers von Jeff Ochoa.
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-components
Keine zusätzliche Einrichtung erforderlich. Laravel erkennt und registriert den Dienstanbieter automatisch.
Optional können Sie die Konfigurationsdatei veröffentlichen mit:
php artisan vendor:publish --provider= " SpatieViewComponentsViewComponentsServiceProvider " --tag= " config "
Dies ist der Standardinhalt der Datei, die unter config/view-components
veröffentlicht wird:
return [
/*
* The root namespace where components reside. Components can be referenced
* with camelCase & dot notation.
*
* Example: 'root_namespace' => AppHttpViewComponents::class
*
* `@render('myComponent')
* => `AppHttpViewComponentsMyComponent`
*/
' root_namespace ' => ' AppHttpViewComponents ' ,
/*
* Register alternative namespaces here, similar to custom view paths.
*
* Example: 'navigation' => AppServicesNavigation::class,
*
* `@render('navigation::mainMenu')`
* => `AppServicesNavigationMainMenu`
*/
' namespaces ' => [
// 'navigation' => AppServicesNavigation::class,
],
];
@render
Direktive Die @render
Blade-Direktive akzeptiert zwei Argumente: Das erste ist der Pfad oder Klassenname der Ansichtskomponente, das zweite ist ein zusätzlicher Satz von Eigenschaften (optional).
Sie können wählen, ob Sie die Komponente über einen Pfad oder einen Klassennamen referenzieren möchten.
@render ( ' myComponent ' )
@render ( App Http ViewComponents MyComponent :: class )
Parameter werden in die __construct
-Methode der Ansichtskomponenten eingefügt. Die Komponente wird mit dem Container von Laravel instanziiert, sodass Parameter, die nicht von render bereitgestellt werden, automatisch eingefügt werden.
use Illuminate Http Request ;
class MyComponent implements Htmlable
{
public function __construct ( Request $ request , string $ color )
{
$ this -> request = $ request ;
$ this -> color = $ color ;
}
// ...
}
@render ( ' myComponent ' , [ ' color ' => ' red ' ] )
Im obigen Beispiel wird $color
explizit festgelegt und ein $request
Objekt wird von Laravel eingefügt.
Durch die Konfiguration von root_namespace
können Sie definieren, wo sich der Großteil Ihrer Ansichtskomponenten befindet. Standardmäßig befindet sich dies in AppHttpViewComponents
.
app/
Http/
ViewComponents/
MyComponent.php
Nested/
NestedComponent.php
Die oben genannten Komponenten können mit @render('myComponent')
und @render('nested.nestedComponent')
gerendert werden.
Sie können in der namespaces
-Konfiguration zusätzliche Namespaces registrieren, ähnlich wie bei Ansichtspfaden.
return [
' namespaces ' => [
' navigation ' => App Services Navigation::class,
],
];
app/
Services/
Navigation/
Menu.php
Die obige Menu
kann jetzt mit @render('navigation::menu')
gerendert werden.
composer test
Weitere Informationen zu den letzten Änderungen finden Sie im CHANGELOG.
Weitere Informationen finden Sie unter BEITRAGEN.
Wenn Sie sicherheitsrelevante Probleme entdecken, 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.