ESTE PAQUETE HA SIDO ABANDONADO
Los componentes de vista son una forma de ayudar a organizar la lógica vinculada a la vista, similar a los compositores de vistas.
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 ' ] )
Un componente de vista puede ser cualquier cosa que implemente el contrato Htmlable
de Laravel, por lo que no es necesario utilizar vistas Blade para representar el componente. Esto es útil para empaquetar paquetes HTML de terceros, como spatie/laravel-menu.
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 ' ] )
La ventaja sobre los compositores de vistas es que los datos y la lógica de representación se vinculan explícitamente en componentes en lugar de conectarse después. También le permiten combinar perfectamente propiedades e inyección de dependencias.
Este paquete se basa en Introducción a View Components en Laravel, una alternativa a View Composers de Jeff Ochoa.
Invertimos muchos recursos en la creación de los mejores paquetes de código abierto. Puedes apoyarnos comprando uno de nuestros productos pagos.
Apreciamos mucho que nos envíe una postal desde su ciudad natal, mencionando cuál de nuestros paquetes está utilizando. Encontrarás nuestra dirección en nuestra página de contacto. Publicamos todas las postales recibidas en nuestro muro virtual de postales.
Puede instalar el paquete a través del compositor:
composer require spatie/laravel-view-components
No es necesaria ninguna configuración adicional. Laravel descubrirá y registrará automáticamente al proveedor de servicios.
Opcionalmente puedes publicar el archivo de configuración con:
php artisan vendor:publish --provider= " SpatieViewComponentsViewComponentsServiceProvider " --tag= " config "
Este es el contenido predeterminado del archivo que se publicará en config/view-components
:
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
La directiva @render
Blade acepta dos argumentos: el primero es la ruta del componente de vista o el nombre de clase, el segundo es un conjunto adicional de propiedades (opcional).
Puede elegir entre hacer referencia al componente mediante una ruta o un nombre de clase.
@render ( ' myComponent ' )
@render ( App Http ViewComponents MyComponent :: class )
Los parámetros se inyectarán en el método __construct
de los componentes de la vista. El componente se crea una instancia con el contenedor de Laravel, por lo que los parámetros que no son proporcionados por el renderizado se inyectarán automáticamente.
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 ' ] )
En el ejemplo anterior, $color
se establece explícitamente y Laravel inyectará un objeto $request
.
Al configurar root_namespace
, puede definir dónde se encuentra la mayor parte de los componentes de su vista. De forma predeterminada, esto está en AppHttpViewComponents
.
app/
Http/
ViewComponents/
MyComponent.php
Nested/
NestedComponent.php
Los componentes anteriores se pueden representar con @render('myComponent')
y @render('nested.nestedComponent')
.
Puede registrar espacios de nombres adicionales en la configuración namespaces
, similar a ver rutas.
return [
' namespaces ' => [
' navigation ' => App Services Navigation::class,
],
];
app/
Services/
Navigation/
Menu.php
El componente Menu
anterior ahora se puede representar con @render('navigation::menu')
.
composer test
Consulte CHANGELOG para obtener más información sobre los cambios recientes.
Consulte CONTRIBUCIÓN para obtener más detalles.
Si descubre algún problema relacionado con la seguridad, envíe un correo electrónico a [email protected] en lugar de utilizar el rastreador de problemas.
La Licencia MIT (MIT). Consulte el archivo de licencia para obtener más información.