이 패키지는 폐기되었습니다
뷰 구성 요소는 뷰 작성기와 유사하게 뷰에 연결된 논리를 구성하는 데 도움이 되는 방법입니다.
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 ' ] )
뷰 컴포넌트는 Laravel의 Htmlable
계약을 구현하는 모든 것이 될 수 있으므로 컴포넌트를 렌더링하기 위해 반드시 블레이드 뷰를 사용할 필요는 없습니다. 이는 spatie/laravel-menu와 같은 타사 HTML 패키지를 래핑하는 데 유용합니다.
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 ' ] )
뷰 컴포저에 비해 장점은 데이터와 렌더링 로직이 나중에 연결되는 대신 구성 요소에서 명시적으로 함께 연결된다는 것입니다. 또한 속성과 종속성 주입을 원활하게 결합할 수 있습니다.
이 패키지는 Jeff Ochoa가 쓴 View Composers의 대안인 Introducing View Components in Laravel을 기반으로 합니다.
우리는 동급 최고의 오픈 소스 패키지를 만드는 데 많은 리소스를 투자합니다. 유료 제품 중 하나를 구매하여 우리를 지원할 수 있습니다.
귀하가 사용하고 있는 당사 패키지를 언급하면서 귀하의 고향에서 엽서를 보내주셔서 진심으로 감사드립니다. 연락처 페이지에서 주소를 확인하실 수 있습니다. 우리는 수신된 모든 엽서를 가상 엽서 월에 게시합니다.
작곡가를 통해 패키지를 설치할 수 있습니다.
composer require spatie/laravel-view-components
추가 설정이 필요하지 않습니다. Laravel은 서비스 제공자를 자동으로 검색하고 등록합니다.
선택적으로 다음을 사용하여 구성 파일을 게시할 수 있습니다.
php artisan vendor:publish --provider= " SpatieViewComponentsViewComponentsServiceProvider " --tag= " config "
이는 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
지시어 @render
Blade 지시문은 두 가지 인수를 허용합니다. 첫 번째는 뷰 구성 요소의 경로 또는 클래스 이름이고 두 번째는 추가 속성 집합(선택 사항)입니다.
경로 또는 클래스 이름을 통해 구성 요소를 참조하는 것 중에서 선택할 수 있습니다.
@render ( ' myComponent ' )
@render ( App Http ViewComponents MyComponent :: class )
매개변수는 뷰 구성요소의 __construct
메소드에 주입됩니다. 구성 요소는 Laravel의 컨테이너로 인스턴스화되므로 렌더링에서 제공되지 않는 매개 변수가 자동으로 주입됩니다.
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 ' ] )
위의 예에서 $color
명시적으로 설정되었으며 $request
객체는 Laravel에 의해 주입됩니다.
root_namespace
구성하면 대부분의 보기 구성 요소가 위치하는 위치를 정의할 수 있습니다. 기본적으로 이는 AppHttpViewComponents
에 있습니다.
app/
Http/
ViewComponents/
MyComponent.php
Nested/
NestedComponent.php
위 구성 요소는 @render('myComponent')
및 @render('nested.nestedComponent')
사용하여 렌더링할 수 있습니다.
뷰 경로와 유사하게 namespaces
구성에 추가 네임스페이스를 등록할 수 있습니다.
return [
' namespaces ' => [
' navigation ' => App Services Navigation::class,
],
];
app/
Services/
Navigation/
Menu.php
위의 Menu
구성 요소는 이제 @render('navigation::menu')
를 사용하여 렌더링할 수 있습니다.
composer test
최근 변경된 사항에 대한 자세한 내용은 변경 로그를 참조하세요.
자세한 내용은 CONTRIBUTING을 참조하세요.
보안 관련 문제를 발견한 경우 문제 추적기를 사용하는 대신 [email protected]로 이메일을 보내주세요.
MIT 라이센스(MIT). 자세한 내용은 라이센스 파일을 참조하십시오.