پیکربندی
Laravel Scaffolder را یکبار تنظیم کنید تا همهٔ ماژولهای تولیدشده در پروژه ساختار یکسانی داشته باشند.
انتشار پیکربندی
php artisan vendor:publish \
--provider="Efati\ModuleGenerator\ModuleGeneratorServiceProvider" \
--tag=module-generator
این دستور فایل config/module-generator.php و کلاسهای پایه/Helper پیشفرض پکیج را منتشر میکند.
نامفضای پایه
نامفضای ریشه با کلید base_namespace تنظیم میشود:
'base_namespace' => 'App',
فقط زمانی مقدار دیگری قرار دهید که Autoload پروژه نیز برای همان PSR-4 root تنظیم شده باشد.
مسیر فایلهای تولیدشده
مقادیر paths نسبت به پوشه app/ هستند:
'paths' => [
'repository' => [
'eloquent' => 'Repositories/Eloquent',
'contracts' => 'Repositories/Contracts',
],
'service' => [
'concretes' => 'Services',
'contracts' => 'Services/Contracts',
],
'dto' => 'DTOs',
'provider' => 'Providers',
'controller' => [
'api' => 'Http/Controllers/Api/V1',
'web' => 'Http/Controllers',
],
'resource' => 'Http/Resources',
'form_request' => 'Http/Requests',
'actions' => 'Actions',
'docs' => 'Docs',
],
مسیر تستهای Feature نسبت به ریشه پروژه تعریف میشود:
'tests' => [
'feature' => 'tests/Feature',
],
پیشفرضهای دستور
پیکربندی فعلی پکیج این پیشفرضها را دارد:
'defaults' => [
'with_controller' => true,
'with_form_requests' => false,
'with_unit_test' => true,
'with_resource' => true,
'with_dto' => true,
'with_provider' => true,
'with_actions' => false,
'controller_middleware' => [],
'controller_type' => 'api', // 'api' یا 'web'
],
فلگهای CLI برای هر اجرای جداگانه این مقادیر را override میکنند. دستور همچنین در صورت اضافهکردن with_policy و with_swagger به config منتشرشده، آنها را بهعنوان پیشفرض میخواند.
Swagger UI و OpenAPI
تنظیمات Swagger زیر کلید swagger قرار دارند و شامل این بخشها هستند:
theme– یکی ازvanilla،tailwindیاdarkcolors– رنگهای رابط کاربریfonts– فونت معمولی و monospacedark_mode– فعالبودن، حالت پیشفرض و ذخیره تنظیماتdisplay– عنوان، توضیح، نمایش Model/Example و نگهداری Authserver– host و portspec– مسیر خروجی، نام فایل و تنظیم دسترسیswagger.jsonsecurity– middleware احراز هویت و Security Schemeهای OpenAPI
نمونه تنظیم Security:
'security' => [
'auth_middleware' => env(
'SWAGGER_AUTH_MIDDLEWARE',
'auth,auth:api,auth:sanctum'
),
'default' => 'bearerAuth',
'secure_spec' => env('SWAGGER_SECURE_SPEC', false),
'schemes' => [
'bearerAuth' => [
'type' => 'http',
'scheme' => 'bearer',
'bearer_format' => 'JWT',
],
],
],
متغیرهای محیطی
config فعلی برای تنظیمات Swagger و کانال لاگ پکیج از Environment Variable استفاده میکند. چند نمونه:
SWAGGER_THEME=vanilla
SWAGGER_SERVER_HOST=localhost
SWAGGER_SERVER_PORT=8000
SWAGGER_SPEC_PATH=storage/swagger-ui
SWAGGER_SPEC_FILENAME=swagger.json
SWAGGER_SECURE_SPEC=false
SWAGGER_AUTH_MIDDLEWARE=auth,auth:api,auth:sanctum
MODULE_GENERATOR_LOG_CHANNEL=
برای فهرست کامل، خود فایل config/module-generator.php منتشرشده منبع نهایی است.
ثبت Provider تولیدشده
وقتی تولید Provider فعال باشد، Laravel Scaffolder فایل Service Provider ماژول را ایجاد میکند و تلاش میکند آن را در اپلیکیشن ثبت کند:
- اگر
bootstrap/providers.phpوجود داشته باشد، Provider به آن اضافه میشود. - در غیر این صورت، اگر
config/app.phpآرایهprovidersداشته باشد، Provider به همان آرایه اضافه میشود.
در نتیجه رفتار به یک نسخه خاص از Laravel وابسته و hard-code نشده است.
انتشار Stubهای سفارشی
php artisan vendor:publish \
--provider="Efati\ModuleGenerator\ModuleGeneratorServiceProvider" \
--tag=module-generator-stubs
قالبها در resources/stubs/module-generator/ قرار میگیرند. برای هماهنگکردن خروجی ژنراتور با استانداردهای پروژه، همین فایلها را ویرایش کنید.