У статті "Огляд атрибутів 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 ключів, прапорців і т.д.