ESTE PACOTE FOI ABANDONADO
Os componentes de visualização são uma forma de ajudar a organizar a lógica vinculada à visualização, semelhante aos compositores de visualização.
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 ' ] )
Um componente de visualização pode ser qualquer coisa que implemente o contrato Htmlable
do Laravel, então você não precisa necessariamente usar visualizações Blade para renderizar o componente. Isso é útil para agrupar pacotes HTML de terceiros, 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 ' ] )
O benefício em relação aos compositores é que os dados e a lógica de renderização são explicitamente vinculados em componentes, em vez de serem conectados posteriormente. Eles também permitem combinar perfeitamente propriedades e injeção de dependência.
Este pacote é baseado em Introducing View Components in Laravel, uma alternativa ao View Composers de Jeff Ochoa.
Investimos muitos recursos na criação dos melhores pacotes de código aberto. Você pode nos apoiar comprando um de nossos produtos pagos.
Agradecemos muito que você nos envie um cartão postal de sua cidade natal, mencionando qual(is) de nossos pacotes você está usando. Você encontrará nosso endereço em nossa página de contato. Publicamos todos os cartões postais recebidos em nosso mural virtual de cartões postais.
Você pode instalar o pacote via compositor:
composer require spatie/laravel-view-components
Nenhuma configuração adicional necessária. O Laravel descobrirá e registrará automaticamente o provedor de serviços.
Opcionalmente, você pode publicar o arquivo de configuração com:
php artisan vendor:publish --provider= " SpatieViewComponentsViewComponentsServiceProvider " --tag= " config "
Este é o conteúdo padrão do arquivo que será publicado em 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
A diretiva @render
Blade aceita dois argumentos: o primeiro é o caminho ou nome da classe do componente de visualização, o segundo é um conjunto extra de propriedades (opcional).
Você pode escolher entre referenciar o componente por meio de um caminho ou nome de classe.
@render ( ' myComponent ' )
@render ( App Http ViewComponents MyComponent :: class )
Os parâmetros serão injetados no método __construct
dos componentes da visualização. O componente é instanciado com o contêiner do Laravel, portanto os parâmetros que não são fornecidos pelo render serão injetados automaticamente.
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 ' ] )
No exemplo acima, $color
é definido explicitamente e um objeto $request
será injetado pelo Laravel.
Ao configurar root_namespace
, você pode definir onde a maior parte dos componentes da sua visualização está localizada. Por padrão, isso está em AppHttpViewComponents
.
app/
Http/
ViewComponents/
MyComponent.php
Nested/
NestedComponent.php
Os componentes acima podem ser renderizados com @render('myComponent')
e @render('nested.nestedComponent')
.
Você pode registrar namespaces adicionais na configuração namespaces
, semelhante à exibição de caminhos.
return [
' namespaces ' => [
' navigation ' => App Services Navigation::class,
],
];
app/
Services/
Navigation/
Menu.php
O componente Menu
acima agora pode ser renderizado com @render('navigation::menu')
.
composer test
Consulte CHANGELOG para obter mais informações sobre o que mudou recentemente.
Consulte CONTRIBUINDO para obter detalhes.
Se você descobrir algum problema relacionado à segurança, envie um e-mail para [email protected] em vez de usar o rastreador de problemas.
A licença MIT (MIT). Consulte Arquivo de licença para obter mais informações.