РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
59 of 1392 menu

Атрибут attributes

Атрибут attributes класса Component предоставляет доступ к коллекции HTML-атрибутов, переданных компоненту в Blade-шаблоне. Он доступен внутри класса компонента через свойство $attributes и возвращает экземпляр класса IlluminateViewComponentAttributeBag. Атрибут позволяет выполнять различные операции с переданными атрибутами, такие как проверка наличия, добавление новых, объединение и преобразование в строку. При рендеринге компонента все атрибуты автоматически выводятся в корневой элемент, что упрощает работу с классами CSS, идентификаторами, data-атрибутами и другими HTML-атрибутами.

Синтаксис

<?php // В классе компонента $this->attributes ?>

Пример

Давайте создадим компонент для кнопки, который будет принимать атрибуты извне:

<?php namespace AppViewComponents; use IlluminateViewComponent; class Button extends Component { public $type; public function __construct($type = 'button') { $this->type = $type; } public function render() { return view('components.button'); } } ?>
<button type="{{ $type }}" {{ $attributes->merge(['class' => 'btn']) }}> {{ $slot }} </button>
<x-button class="btn-primary" id="submit-btn"> Submit </x-button>

Результат выполнения кода:

<button type="button" class="btn btn-primary" id="submit-btn"> Submit </button>

Пример

Проверим наличие атрибута и получим его значение внутри класса компонента:

<?php namespace AppViewComponents; use IlluminateViewComponent; class Alert extends Component { public $type; public $dismissible; public function __construct($type = 'info') { $this->type = $type; } public function render() { $this->dismissible = $this->attributes->has('data-dismissible'); return view('components.alert'); } } ?>
<div {{ $attributes->merge(['class' => "alert alert-{$type}"]) }}> @if ($dismissible) <button class="close">×</button> @endif {{ $slot }} </div>
<x-alert class="custom-alert" data-dismissible="true"> This is an alert message. </x-alert>

Результат выполнения кода:

<div class="alert alert-info custom-alert" data-dismissible="true"> <button class="close">×</button> This is an alert message. </div>

Пример

Объединим атрибуты с условным добавлением класса:

<?php namespace AppViewComponents; use IlluminateViewComponent; class Card extends Component { public $header; public $footer; public $shadow; public function __construct($header = null, $footer = null, $shadow = false) { $this->header = $header; $this->footer = $footer; $this->shadow = $shadow; } public function render() { $classes = ['card']; if ($this->shadow) { $classes[] = 'shadow-lg'; } $this->attributes = $this->attributes->merge([ 'class' => implode(' ', $classes) ]); return view('components.card'); } } ?>
<div {{ $attributes }}> @if ($header) <div class="card-header"> {{ $header }} </div> @endif <div class="card-body"> {{ $slot }} </div> @if ($footer) <div class="card-footer"> {{ $footer }} </div> @endif </div>
<x-card header="Card Title" :shadow="true" class="border-primary"> Card content goes here. </x-card>

Результат выполнения кода:

<div class="card shadow-lg border-primary"> <div class="card-header"> Card Title </div> <div class="card-body"> Card content goes here. </div> </div>

Смотрите также

  • класс Component,
    от которого наследуются все компоненты
  • атрибут slot,
    для передачи содержимого в компонент
  • метод render,
    определяет представление компонента
  • метод shouldRender,
    условно отключает рендеринг компонента
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить