مقاله

PSR چیست، مهم‌ترین PSRها برای Laravel developer و autoloading با Composer — زبان مشترک ecosystem.

استانداردهای PSR در PHP — PSR-4، PSR-12 و نقش در Laravel

استانداردهای PSR در PHP — PSR-4، PSR-12 و نقش در Laravel

وقتی composer require spatie/laravel-permission می‌زنید، پکیج با قراردادهای مشترک کار می‌کند — بخشی از آن PSR (PHP Standards Recommendations) از PHP-FIG است. Laravel خودش PSR-4، PSR-12 و interfaceهای PSR-3/6/7/11/16/18 را رعایت یا adapt می‌کند.

PHP-FIG چیست؟

گروه framework و library authorها — هدف interoperability. PSR پیشنهاد است نه اجبار — اما ecosystem عملاً پیروی می‌کند.

PSR-4 — Autoloading

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Database\\Factories\\": "database/factories/"
    }
}

namespace به پوشه map — Composer. بعد از تغییر: composer dump-autoload.

PSR-12 — Coding Style

توسعه PSR-2 — brace، indent، declare. Laravel Pint پیش‌فرض نزدیک PSR-12 است. یک style در PR — Clean Code.

PSR-3 — Logger Interface

interface LoggerInterface
{
    public function emergency(string $message, array $context = []): void;
    public function info(string $message, array $context = []): void;
    // ...
}

Laravel Log facade — Monolog implements PSR-3.

PSR-7 — HTTP Message

Request/Response interface — Guzzle، Symfony HttpClient. Laravel Request/Response wrapper خودش — اما middleware ecosystem آشنا.

PSR-11 — Container

Psr\Container\ContainerInterface — Laravel container compatible.

PSR-16 — Simple Cache

get/set/delete ساده — Laravel Cache facade قوی‌تر اما مفهوم مشابه.

چرا مهم است؟

  • swap implementation — logger، cache
  • خواندن doc پکیج‌ها
  • contribute به open source

PSRهای کمتر روزمره

PSR-6 cache pool، PSR-15 middleware HTTP — در Symfony بیشتر؛ Laravel abstraction خودش.

اشتباهات

  • namespace اشتباه — class not found
  • ignore Pint — style ناهمگون
  • classmap و PSR-4 قاطی بدون دلیل

جمع‌بندی

PSR-4 و PSR-12 روزانه؛ بقیه برای درک ecosystem. Composer: نصب Composer. Error: Handling.

ساختار پکیج استاندارد