استانداردهای 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.