• Czas czytania ~1 min
  • 28.01.2025

Artykuł "Laravel Attributes Overview: What and How to Use" (Przegląd atrybutów Laravel: co i jak używać) potępił możliwość uproszczenia wstrzykiwania zależności za pomocą atrybutów. Nie jest jednak konieczne ograniczanie się tylko do standardowych atrybutów Laravel. Możesz utworzyć własny atrybut, który wykona żądane zadanie.

Przykład stworzenia atrybutu, który automatycznie pobiera wartości z konfiguracji, czyli ma być podobny do pomocnika config():

Najpierw stwórzmy klasę MyConfig, która implementuje interfejs Illuminate\Contracts\Container\ContextualAttribute. Jest to konieczne, aby kontener mógł z nim pracować.

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);
    }
}

Teraz atrybut #[MyConfig] jest gotowy. Użyj go, na przykład, aby automatycznie podstawić nazwę aplikacji w kontrolerze:

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}";
    }
}

Oczywiście, Laravel ma już , Configale najważniejsze jest to, że ten przykład można łatwo dostosować do innych zadań, takich jak podstawianie kluczy API, flag itp.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

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...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297

Codziennie zestrzeliwujemy „Shahedy”. Za każdym razem to uratowane życie. Potrzebujemy mobilności: busa lub przyczepy. Każda wpłata = kolejna noc pod ochroną.

🚐 Zbiórka na busa dla zespołu, pułk 1020 🎯 Cel: 500 000 ₴
🔗 Link do zbiórkiі 💳 4441 1111 2546 4663