Symfony প্রজেক্টে কনফিগারেশন ফাইল এবং এনভায়রনমেন্ট ভেরিয়েবল (environment variables) ব্যবহৃত হয় অ্যাপ্লিকেশনের সেটিংস এবং প্রয়োজনীয় কনফিগারেশন পরিবর্তন করার জন্য। Symfony-তে config/ ডিরেক্টরি, .env ফাইল এবং enviroment variables বিভিন্ন কনফিগারেশন সেটিংস এবং ডিপেন্ডেন্সি ম্যানেজমেন্টের কাজ সহজ করে তোলে।
কনফিগারেশন ফাইল (Configuration Files)
Symfony-তে কনফিগারেশন ফাইলগুলো অ্যাপ্লিকেশনটির বিভিন্ন সেটিংস, যেমন সার্ভিস কনফিগারেশন, ডাটাবেস সংযোগ, সিকিউরিটি সেটিংস, রাউটিং ইত্যাদি সংরক্ষণ করে। কনফিগারেশন ফাইলগুলি সাধারণত YAML (Yet Another Markup Language), XML, বা PHP ফরম্যাটে থাকে। Symfony ৪ ও পরবর্তী সংস্করণে YAML কনফিগারেশন সবচেয়ে জনপ্রিয় এবং সাধারণভাবে ব্যবহৃত।
config/ ডিরেক্টরির কাঠামো
config/
├── packages/
│ ├── doctrine.yaml
│ ├── framework.yaml
│ └── security.yaml
├── routes/
│ └── annotations.yaml
├── services.yaml
└── parameters.yaml
config/packages/
এই ডিরেক্টরির ফাইলগুলো প্যাকেজ-এর জন্য কনফিগারেশন রাখে, যেমন Doctrine, Framework, Security ইত্যাদি। উদাহরণস্বরূপ:
doctrine.yaml (ডাটাবেস কনফিগারেশন):
doctrine: dbal: driver: pdo_mysql host: '%env(DATABASE_HOST)%' dbname: '%env(DATABASE_NAME)%' user: '%env(DATABASE_USER)%' password: '%env(DATABASE_PASSWORD)%' charset: UTF8framework.yaml (ফ্রেমওয়ার্ক কনফিগারেশন):
framework: secret: '%env(APP_SECRET)%' router: resource: '%kernel.project_dir%/config/routes.yaml'security.yaml (সিকিউরিটি কনফিগারেশন):
security: firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: anonymous: true provider: app_user_provider
config/services.yaml
এই ফাইলটি Symfony-তে services কনফিগার করে, যেমন ডিপেন্ডেন্সি ইনজেকশন (Dependency Injection) সেটআপ, সার্ভিসের জন্য ডিফিনিশন ইত্যাদি।
services:
App\Service\MyService:
arguments:
$parameter: '%env(MY_SERVICE_PARAMETER)%'
config/routes/
এই ডিরেক্টরি রাউটিং কনফিগারেশন সংরক্ষণ করে। আপনি এখানে YAML, Annotations, অথবা PHP ব্যবহার করে রাউট সংজ্ঞায়িত করতে পারেন। উদাহরণ:
annotations.yaml:
controllers: resource: '../../src/Controller/' type: annotation
এনভায়রনমেন্ট ভেরিয়েবল (Environment Variables)
এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে অ্যাপ্লিকেশনের কনফিগারেশন সেটিংস ম্যানেজ করা যায়, যা আপনার অ্যাপ্লিকেশনকে আরও লিগ্যাবল এবং নিরাপদ করে তোলে। Symfony-তে এই ভেরিয়েবলগুলো .env ফাইলের মাধ্যমে সেট করা হয়, যা বিশেষভাবে প্রোডাকশন এবং ডেভেলপমেন্ট পরিবেশের জন্য কনফিগারেশন সেটিংস আলাদা করতে সাহায্য করে।
.env ফাইল
.env ফাইলটি অ্যাপ্লিকেশনের ডেভেলপমেন্ট পরিবেশের জন্য ভেরিয়েবল নির্ধারণ করে। Symfony ৪ এবং তার পরবর্তী সংস্করণে .env ফাইলটি ডিফল্ট কনফিগারেশন ফাইল হিসেবে ব্যবহৃত হয়।
উদাহরণ ( .env ফাইল):
APP_ENV=dev
APP_SECRET=your-secret-key
DATABASE_URL="mysql://root:password@127.0.0.1:3306/my_database"
MAILER_DSN=smtp://localhost
.env.local ফাইল
এটি ব্যক্তিগত (local) কনফিগারেশন সেটিংস নির্ধারণের জন্য ব্যবহৃত হয়, যা ডেভেলপার বা প্রোডাকশন পরিবেশে আলাদা আলাদা কনফিগারেশন থাকতে পারে। .env.local ফাইলটি .env ফাইলের উপর প্রাধান্য পায়।
এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার:
Symfony অ্যাপ্লিকেশন চলাকালীন environments এর উপর ভিত্তি করে কনফিগারেশন পরিবর্তন করতে env() ফাংশন ব্যবহার করা হয়।
config/packages/doctrine.yaml:
doctrine:
dbal:
driver: pdo_mysql
host: '%env(DATABASE_HOST)%'
dbname: '%env(DATABASE_NAME)%'
user: '%env(DATABASE_USER)%'
password: '%env(DATABASE_PASSWORD)%'
এখানে %env(DATABASE_HOST)% Symfony-কে বলে যে এটি .env ফাইল থেকে DATABASE_HOST ভেরিয়েবলটির মান নেবে।
এনভায়রনমেন্ট ভেরিয়েবল অ্যাক্সেস:
Symfony-তে .env থেকে এনভায়রনমেন্ট ভেরিয়েবল অ্যাক্সেস করতে আপনি $_ENV বা getenv() ফাংশনও ব্যবহার করতে পারেন, তবে সাধারণত env() ফাংশনটি ব্যবহার করা হয়।
উদাহরণ:
$databaseHost = $_ENV['DATABASE_HOST']; // .env ফাইল থেকে ভেরিয়েবল
এনভায়রনমেন্ট বিশেষ কনফিগারেশন
Symfony অ্যাপ্লিকেশন চলাকালীন dev, prod, বা অন্যান্য পরিবেশ অনুযায়ী ভিন্ন ভিন্ন কনফিগারেশন সেট করতে আপনি .env ফাইলের পাশাপাশি পৃথক কনফিগারেশন ফাইল ব্যবহার করতে পারেন।
উদাহরণ:
- .env.dev: ডেভেলপমেন্ট পরিবেশের জন্য কনফিগারেশন।
- .env.prod: প্রোডাকশন পরিবেশের জন্য কনফিগারেশন।
এছাড়া আপনি config/packages/prod/ বা config/packages/dev/ ডিরেক্টরির মধ্যে ভিন্ন ভিন্ন কনফিগারেশন ফাইল রাখতে পারেন।
সারাংশ
Symfony-তে কনফিগারেশন ফাইল এবং এনভায়রনমেন্ট ভেরিয়েবল ব্যবহারের মাধ্যমে আপনি অ্যাপ্লিকেশনকে আরো কাস্টমাইজ এবং স্কেলেবল করতে পারেন। config/ ডিরেক্টরি অ্যাপ্লিকেশনের সকল কনফিগারেশন ফাইল ধারণ করে, যেখানে .env ফাইল ডেভেলপমেন্ট ও প্রোডাকশন পরিবেশে ভেরিয়েবল সংজ্ঞায়িত করে। এই দুটি ধারণা Symfony-কে একটি শক্তিশালী এবং কাস্টমাইজযোগ্য ফ্রেমওয়ার্ক হিসেবে তৈরি করতে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more