• Час читання ~1 хв
  • 28.01.2025

У статті "Огляд атрибутів Laravel: що і як використовувати" засуджується можливість спрощення впровадження залежностей за допомогою атрибутів. Однак не обов'язково обмежуватися лише стандартними атрибутами Laravel. Ви можете створити свій власний атрибут, який буде виконувати потрібне вам завдання.

Приклад створення атрибуту, який автоматично підтягує значення з конфігурації, тобто щоб бути схожим на хелпер config():

Спочатку створимо клас MyConfig, який реалізує інтерфейс Illuminate\Contracts\Container\ContextualAttribute. Це необхідно для того, щоб контейнер міг з ним працювати.

namespace App\Attributes;
use Attribute;
use Illuminate\Contracts\Container\Container;
use Illuminate\Contracts\Container\ContextualAttribute;
#[Attribute(Attribute::TARGET_PARAMETER)]
class MyConfig implements ContextualAttribute
{
    public function __construct(
        public string $key,
    ) {}
    public static function resolve(self $attribute, Container $container)
    {
        return $container->make('config')->get($attribute->key);
    }
}

Тепер атрибут #[MyConfig] готовий. Використовуйте його, наприклад, для автоматичної підстановки назви програми в контролері:

namespace App\Http\Controllers;
use App\Attributes\MyConfig;
class ExampleController extends Controller
{
    public function __construct(
        #[MyConfig('app.name')] protected string $appName
    ) {}
    public function show(): string
    {
        return "Имя приложения: {$this->appName}";
    }
}

Звичайно, у Laravel вже є , Configале головне, що цей приклад легко адаптується під інші завдання, такі як підстановка API ключів, прапорців і т.д.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297

Ми знищуємо "шахеди" щодня. Щоразу — це врятовані життя. Але нам потрібна мобільність: бус або прицеп. Кожен донат = ще одна ніч під захистом.

🚐 Збір на бус для мого екіпажу, полк 1020 🎯 Ціль: 500 000 ₴
🔗 Посилання на банку 💳 4441 1111 2546 4663