شروع کار با لاراول 7: پیکربندی

مقدمه

کلیه فایلهای پیکربندی برای فریم ورک Laravel در دایرکتوری config ذخیره می شوند. هر گزینه مستند شده است ، بنابراین در صورت تمایل با گزینه هایی که در دسترس شما وجود دارد به بررسی فایل ها بپردازید.

فهرست مطالب

  • Introduction
  • Environment Configuration
    • Environment Variable Types
    • Retrieving Environment Configuration
    • Determining The Current Environment
    • Hiding Environment Variables From Debug Pages
  • Accessing Configuration Values
  • Configuration Caching
  • Maintenance Mode

پیکربندی محیط

اغلب مقادیر پیکربندی مختلف بر اساس محیطی که برنامه در آن اجرا می شود مفید است. 

برای ساختن این مسئله ، لاراول از كتابخانه PHP DotEnv توسط Vance Lucas استفاده می كند. در یک نصب جدید Laravel ، دایرکتوری root برنامه شما حاوی فایل .env.example است. اگر Laravel را از طریق Composer نصب کنید ، این فایل به طور خودکار به .env. تغییر نام می یابد. در غیر این صورت ، باید فایل را به صورت دستی تغییر دهید.

فایل .env شما نباید به source control برنامه کامیت شود، زیرا هر برنامه نویس یا سروری با استفاده از برنامه شما می تواند به environment configuration متفاوت احتیاج داشته باشد. علاوه بر این ، در صورتی که هکربه ریپازیتوری source control  شما دسترسی پیدا کند ، یک خطر امنیتی است ، از آنجا که هرگونه sensitive credentials در معرض دید شما قرار می گیرد.

اگر در یک تیم developing هستید ، ممکن است بخواهید که با یک فایل.env.example برنامه را ادامه دهید. با قرار دادن مقادیر placeholder در فایل پیکربندی example، سایر توسعه دهندگان در تیم شما می توانند به وضوح ببینند که environment variable ها برای اجرای برنامه مورد نیاز هستند. همچنین ممکن است فایل .env.testing  را ایجاد کنید. این فایل هنگام اجرای تست های PHPUnit یا اجرای دستورات Artisan با گزینه --env=testing ، فایل .env را override می کند.

نکته: هر متغیر در فایل.env می تواند oeveride شود توسط متغیرهای محیط خارجی مانند server-level یا system-level.

انواع متغیرهای محیطی

کلیه متغیرهای موجود در فایل های .env به صورت رشته ها آنالیز می شوند ، بنابراین مقادیر رزرو شده ایجاد شده اند تا به شما امکان دهند رنج گسترده تری از انواع تابع env() برگردانید:

اگر نیاز به تعریف متغیر محیطی با مقداری که شامل فاصله باشد دارید ، این کار را با محصور کردن مقدار به صورت"" انجام دهید..

APP_NAME="My Application"

بازیابی پیکربندی محیط

تمام متغیرهای لیست شده در این فایل هنگام دریافت درخواست شما ، در $_ENV لود می شوند.با این حال ، شما ممکن است از env helperبرای بازیابی مقادیر این متغیرها در فایلهای configuration  خود استفاده کنید. در واقع ، اگر پرونده های پیکربندی Laravel را مرور کنید ، به چندین مورد استفاده از این helper: توجه خواهید کرد:

'debug' =‌>‌ env('APP_DEBUG', false),

مقدار دوم  پاس شده به تابع env مقدار "default value" است. اگر هیچ متغیر محیطی برای کلید داده شده وجود نداشته باشد از این مقدار استفاده می شود.

تعیین محیط جاری

محیط برنامه جاری از طریق متغیر APP_ENV از فایل.env تعیین می شود. شما می توانید از طریق متذenvironment در برنامه به این مقدار دسترسی داشته باشید:

$environment = App::environment();

همچنین می توانید argument های خود را با متد environment ارسال کنید تا بررسی کنید آیا environment با یک value مطابقت دارد یا خیر. اگر environment با هر یک از مقادیر داده شده مطابقت داشته باشد ، true برمیگرداند:

if (App::environment('local')) {
        // The environment is local
    }
    
    if (App::environment(['local', 'staging'])) {
        // The environment is either local OR staging...
    }

نکته:  تشخیص environment در برنامه فعلی با استفاده از یک متغیرserver-level APP_ENV environment می تواندoverride شود. این می تواند زمانی مفید باشد که نیاز به اشتراک گذاری یک برنامه مشابه برای تنظیمات مختلف environment داشته باشید ، بنابراین می توانید یک host راه اندازی کنید تا با یک environment خاص در تنظیمات سرور خود مطابقت داشته باشد.

پنهان کردن متغیرهایEnvironmen از صفحاتDebug

هنگامی که یک exception به صورت uncaught است و مقدار متغیر محیط APP_DEBUG برابر با true است ، صفحه debug تمام متغیرهای محیط و محتویات آنها را نشان می دهد. در بعضی موارد ممکن است بخواهید متغیرهای خاصی را obscure کنید. این کار را با به روزرسانی گزینه debug_blacklist در فایل کانفیگ config/app.php انجام دهید.

برخی از متغیرها در هردو environment variables و server / request data در دسترس هستند. بنابراین ، ممکن است لازم باشد که آنها را برای هر دو $_ENV و $_SERVER بلک لیست کنید:

return [
    
        // ...
    
        'debug_blacklist' =‌>‌ [
            '_ENV' =‌>‌ [
                'APP_KEY',
                'DB_PASSWORD',
            ],
    
            '_SERVER' =‌>‌ [
                'APP_KEY',
                'DB_PASSWORD',
            ],
    
            '_POST' =‌>‌ [
                'password',
            ],
        ],
    ];

دسترسی به مقادیر پیکربندی

شما به راحتی می توانید با استفاده از تابع config helperاز هر نقطه برنامه به مقادیر پیکربندی خود دسترسی پیدا کنید.به مقادیر پیکربندی ممکن است با استفاده از سینتکس "dot" ، که شامل نام فایل است ، دسترسی پیدا کنید.ممکن است یک مقدار به صورت پیش فرض مشخص شود که اگر آپشن کانفیگی وجود نداشته باشد آن را برگرداند:

$value = config('app.timezone');

برای تنظیم مقادیر پیکربندی در زمان اجرا ، آرایه ای را به config helper ارسال کنید:

config(['app.timezone' =‌>‌ 'America/Chicago']);

تنظیمات Caching

برای افزایش سرعت برنامه ، باید تمام فایلهای پیکربندی خود را با استفاده از دستور   config:cache در یک فایل کش کنید. در این صورت تمام گزینه های پیکربندی برنامه شما را در یک فایل قرار میگیرد که به سرعت توسط فریم ورک لود می شود.

به طور معمول باید دستور php artisan config:cache را به عنوان بخشی از روال توسعه تولید خود اجرا کنید. این دستور نباید در حین local development اجرا شود زیرا گزینه های پیکربندی در طول دوره  development برنامه به طور متناوب نیاز به تغییر دارند.

{توجه: اگر دستور config:cache را در حین فرایند توسعه خود اجرا می کنید ، باید مطمئن باشید که از درون فایلهای پیکربندی خود فقط تابع env را فراخوانی می کنید.

پس از cache کردن پیکربندی ، فایل.env لود نمی شود و همه فراخوان های تابع env مقدار null برمیگرداند. 

مد Maintenance

وقتی برنامه شما در حالت نگهداری یا maintenance است ، یک ویو سفارشی برای همه درخواست های برنامه به شما نمایش داده می شود. این کار باعث می شود که "disable" کردن برنامه هنگام به روزرسانی یا maintenance آسان شود. اگر برنامه در حالت نگهداری یا maintenance باشد ، MaintenanceModeException با status code 503 ارسال می شود.

برای فعال کردن maintenance mode ، دستور Artisan  زیر را اجرا کنید:

php artisan down

همچنین می توانید حالت های message و retry را با دستور down انجام دهید. مقدار پیام ممکن است برای نمایش یا لاگ یک پیام سفارشی استفاده شود ، در حالی که مقدار retry به عنوان Retry-After HTTP header's  ست می شود:

php artisan down --message="Upgrading Database" --retry=60

در حالت maintenance، آدرس های IP خاص یا شبکه ها مجاز به دسترسی به برنامه با استفاده از دستور allow می باشند:

php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16

برای غیرفعال کردن حالت تعمیر و نگهداری ، از دستور up استفاده کنید:

php artisan up

نکته: شما می توانید template پیش فرض maintenance mode را با تعریف template خود در resources/views/errors/503.blade.php سفارشی کنید.

حالت و صف های Maintenance

در حالی که برنامه شما در حالت maintenance است ، هیچ تسکی در صف وجود نخواهد داشت. پس از خارج شدن برنامه از حالت maintenance ، کارها به صورت عادی ادامه خواهد یافت.

گزینه های جایگزین برای حالت Maintenance

از آنجا که حالت maintenance نیاز دارد که برنامه برای چند ثانیه down شود ، گزینه هایی مانند Envoyer را در نظر بگیرید تا بتوانید downtime را صفر کنید.