জটিল কোড ছাড়াই অ্যাডমিন-এডিটেবল সেটিংস
অ্যাপগুলো একটি অবিরাম সমস্যার সম্মুখীন হয়। কিছু সেটিংস .env ফাইলে থাকা উচিত। আবার কিছু সেটিংস নতুন কোড ডেপ্লয় (deploy) না করেই একটি অ্যাডমিন প্যানেলের মাধ্যমে পরিবর্তন করা প্রয়োজন। উদাহরণস্বরূপ: সাইটের নাম, টাইমজোন, বা রেজিস্ট্রেশন সেটিংস।
অনেক ডেভেলপার এগুলো ডাটাবেসে সংরক্ষণ করেন কিন্তু এতে বিশৃঙ্খলা তৈরি হয়। ফলে ডেটা পড়ার জন্য আপনার কাছে দুটি ভিন্ন উপায় তৈরি হয়। আপনার অ্যাপের একটি অংশ config() ব্যবহার করে, আবার অন্য অংশ একটি ডাটাবেস মডেল ব্যবহার করে। এর ফলে সেটিংস অসামঞ্জস্যপূর্ণ হয়ে পড়ে এবং বাগ (bug) তৈরি হয়।
একটি সিঙ্গেল রিড পাথ (single read path) ব্যবহার করে আপনি এটি এড়াতে পারেন। ডাটাবেসকে এমন একটি লেয়ার হিসেবে বিবেচনা করুন যা বুট (boot) হওয়ার সময় আপনার কনফিগারের ওপর ওভারলে (overlay) হিসেবে কাজ করবে।
এটি যেভাবে তৈরি করবেন:
• একটি সিঙ্গেল সোর্স অফ ট্রুথ (single source of truth) ব্যবহার করুন। ডাটাবেস ভ্যালু বা মানটি ধরে রাখবে, কিন্তু অ্যাপ্লিকেশন শুধুমাত্র config() এর মাধ্যমে তা পড়বে।
• টাইপড ক্লাস (typed classes) ব্যবহার করুন। লুজ অ্যারে (loose arrays) এর পরিবর্তে স্ট্রিক্ট টাইপসহ ক্লাস ব্যবহার করুন। এটি টাইপো এবং সাইলেন্ট এরর (silent errors) প্রতিরোধ করে।
• বুট প্রসেসের সময় সেটিংস লোড করুন। ডাটাবেস থেকে ভ্যালুগুলো তুলে এনে config অ্যারেতে পুশ করার জন্য একটি সার্ভিস প্রোভাইডার ব্যবহার করুন।
এই দুটি টেকনিক্যাল ট্র্যাপ (technical traps) সম্পর্কে সতর্ক থাকুন:
দ্য টাইমজোন ট্র্যাপ (The Timezone Trap) Laravel বুট প্রসেসের শুরুর দিকেই টাইমজোন সেট করে ফেলে। আপনি যদি পরে কনফিগ ভ্যালু পরিবর্তন করেন, PHP তবুও পুরনো টাইমজোনটিই ব্যবহার করবে। আপনার নতুন কনফিগ ভ্যালুর সাথে গ্লোবাল PHP সেটিংস সিঙ্ক (sync) করার জন্য আপনাকে ম্যানুয়ালি
date_default_timezone_set()কল করতে হবে।দ্য ফ্রেশ ইনস্টল ট্র্যাপ (The Fresh Install Trap) একটি নতুন অ্যাপে কোনো ডাটাবেস টেবিল থাকে না। যদি সেটিংস টেবিল না থাকার কারণে আপনার বুট প্রসেস ব্যর্থ হয়, তবে অ্যাপটি চালু হবে না। অ্যাপ বুট হতে না পারলে আপনি মাইগ্রেশন (migrations) চালাতে পারবেন না। আপনার সেটিংস লজিকটিকে একটি
try/catchব্লকের মধ্যে রাখুন। এটি আপনাকে মাইগ্রেশন চালানোর আগ পর্যন্ত .env এর ডিফল্ট ভ্যালুগুলোতে ফিরে যেতে (fall back) সাহায্য করবে।
নিরাপত্তার জন্য আরও একটি টিপস: রেজিস্ট্রেশনের মতো কোনো ফিচার ডিজেবল করার সময় শুধুমাত্র UI থেকে বাটনটি হাইড (hide) করে রাখবেন না। কনফিগ থেকে ফিচারটি পুরোপুরি সরিয়ে ফেলুন। আপনি যদি কনফিগ থেকে ফিচারটি সরিয়ে ফেলেন, তবে রুটগুলোও (routes) অদৃশ্য হয়ে যাবে। একটি লাইভ এন্ডপয়েন্টসহ হাইড করা ফর্ম একটি সিকিউরিটি রিস্ক। একটি মিসিং রুট 404 রিটার্ন করে।
আপনার কোড সহজ রাখুন। আপনার কন্ট্রোলার (controllers) এবং ভিউ (views) এর জানার প্রয়োজন নেই যে সেটিংসটি কোনো ফাইল থেকে এসেছে নাকি ডাটাবেস থেকে। তাদের শুধুমাত্র config() দেখা উচিত।
উৎস: https://dev.to/nasrulhazim/admin-editable-settings-without-giving-up-config-2cj0
