ডাটাবেস এবং স্টোরেজের জন্য লারাভেলের সাথে সুপাবেস কীভাবে একীভূত করবেন

সর্বশেষ আপডেট: 5 এর ডিসেম্বর 2025
  • Supabase Postgres ডাটাবেস ব্যবহারের জন্য Laravel কনফিগার করার জন্য ড্রাইভার, স্কিমা এবং পরিবেশ ভেরিয়েবল সঠিকভাবে সামঞ্জস্য করা প্রয়োজন।
  • লারাভেলের জন্য সুপাবেসের নির্দিষ্ট ড্রাইভার স্বয়ংক্রিয়ভাবে কোয়েরি এবং জয়েনগুলিতে UUID কলামের সাধারণ সমস্যাগুলি সমাধান করে।
  • ফ্লাইসিস্টেম অ্যাডাপ্টার আপনাকে সুপাবেস স্টোরেজকে কেবল আরেকটি লারাভেল ডিস্ক হিসেবে বিবেচনা করতে দেয়, যা সহজেই ফাইল আপলোডগুলিকে একীভূত করে।
  • লেখার ত্রুটি এড়াতে এবং স্থিতিশীল প্রবাহ নিশ্চিত করার জন্য বিশেষ সুবিধাপ্রাপ্ত পরিষেবা কী এবং সু-কনফিগার করা বাকেট ব্যবহার করা গুরুত্বপূর্ণ।

লারাভেলের জন্য সুপাবেস

আপনি যদি লারাভেল নিয়ে কাজ করেন এবং ব্যাকএন্ড প্রোগ্রামিংয়ে নিবেদিতপ্রাণ হন , আর সুপাবেসের মতো একটি আধুনিক, ম্যানেজড পোস্টগ্রেসকিউএল ডাটাবেসে যাওয়ার কথা ভাবেন , তাহলে সম্ভবত আপনি বুঝতে পেরেছেন যে শুধু .env ফাইলের কয়েকটি ভেরিয়েবল পরিবর্তন করাই যথেষ্ট নয়। এখানে কানেকশনের বিবরণ, স্কিমা, অথেনটিকেশন এবং ফাইল স্টোরেজের মতো বিষয় থাকে, যেগুলো উপেক্ষা করলে বেশ কিছু দুর্বোধ্য এরর দেখা দিতে পারে।

তাছাড়া, যখন আপনি আরও এক ধাপ এগিয়ে লারাভেলের ডিস্ক সিস্টেমের (স্টোরেজ) সাথে সমন্বিত ফাইল স্টোরেজ হিসেবে সুপাবেস ব্যবহার করতে চান , তখন বিষয়গুলো কিছুটা জটিল হয়ে ওঠে: সার্ভিস কী, বাকেট, এন্ডপয়েন্ট, কাস্টম ফ্লাইসিস্টেম ড্রাইভার ইত্যাদি। সুখবর হলো, ডেটাবেস, স্টোরেজ এবং UUID হ্যান্ডলিং—সবকিছুই বেশ পরিচ্ছন্নভাবে নিখুঁতভাবে সমন্বিত করা যায়।

লারাভেলকে সুপাবেস ডাটাবেসের সাথে সংযুক্ত করা হচ্ছে

প্রথম ধাপ হলো একটি কার্যকর লারাভেল প্রজেক্ট তৈরি করা এবং সেটিকে সুপাবেস (Supabase) দ্বারা প্রদত্ত পোস্টগ্রেস (Postgres) ডাটাবেসের সাথে লিঙ্ক করা। এর জন্য আপনার আপডেটেড পিএইচপি (PHP) এবং কম্পোজার (Composer) সহ একটি পরিবেশ প্রয়োজন , এবং আপনি একটি নতুন প্রজেক্ট তৈরি করতে পারেন অথবা একটি বিদ্যমান প্রজেক্ট ব্যবহার করতে পারেন। কনসোল থেকে, সাধারণ লারাভেল কমান্ড ব্যবহার করে প্রজেক্টটি জেনারেট করুন এবং তারপর সংযোগ স্থাপন শুরু করুন।

প্রজেক্টের ফ্রেমওয়ার্ক তৈরি হয়ে গেলে, সাধারণত একটি সাধারণ অথেনটিকেশন সিস্টেম ইনস্টল করা হয়। লারাভেল ব্রিজ এক্ষেত্রে খুব ভালোভাবে খাপ খায়, কারণ এতে ব্লেড টেমপ্লেট এবং একটি বেসিক লগইন ও রেজিস্ট্রেশন ফ্লো অন্তর্ভুক্ত রয়েছে । এর ফলে আপনি দ্রুত যাচাই করতে পারেন যে আপনার ডাটাবেস কানেকশনটি সঠিকভাবে কনফিগার করা আছে এবং আপনি কোনো সমস্যা ছাড়াই ইউজার তৈরি করতে পারবেন।

কানেকশনের বিবরণ পেতে, আপনার সুপাবেস ড্যাশবোর্ডে লগ ইন করুন এবং একটি নতুন ডাটাবেস প্রজেক্ট তৈরি করুন (আপনি এটি সরাসরি `database.new` থেকে করতে পারেন , যা আপনাকে উইজার্ডে নিয়ে যাবে)। যদি আপনার এখনও কোনো অ্যাকাউন্ট না থাকে, তাহলে আপনি প্রথমে সাইন-আপ স্ক্রিনটি দেখতে পাবেন; আর যদি আগে থেকেই একটি অ্যাকাউন্ট থাকে, তাহলে আপনি সরাসরি প্রজেক্ট সেটিংসে চলে যাবেন এবং সেখানে কানেকশন স্ট্রিং খুঁজে পাবেন।

প্রজেক্ট পেজের কানেকশন সেকশনে আপনি একটি "কানেক্ট" বাটন বা এই ধরনের কিছু দেখতে পাবেন। এটিতে ক্লিক করলে বিভিন্ন কানেকশন স্ট্রিং ফরম্যাট (URI, স্বতন্ত্র প্যারামিটার ইত্যাদি) দেখা যাবে। সম্পূর্ণ URI-টি কপি করুন, কিন্তু পাসওয়ার্ডটি পরিবর্তন করে আপনার ডাটাবেসের জন্য ব্যবহৃত পাসওয়ার্ডটি ব্যবহার করতে ভুলবেন না, কারণ প্রায়শই একটি ডিফল্ট পাসওয়ার্ড বা প্লেসহোল্ডার দেখানো হয়।

এই তথ্য দিয়ে, আপনাকে আপনার লারাভেল প্রজেক্টের .env ফাইলে গিয়ে DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, এবং DB_PASSWORD ভ্যারিয়েবলগুলো আপডেট করতে হবে, অথবা আপনি যদি সম্পূর্ণ স্ট্রিং ফরম্যাট ব্যবহার করতে চান তবে DATABASE_URL ভ্যারিয়েবলটি কনফিগার করতে পারেন। এর মূল লক্ষ্য হলো এটা নিশ্চিত করা যে, সবকিছু যেন আপনার লোকালহোস্টের পরিবর্তে সুপাবেস পোস্টগ্রেস ক্লাস্টারকে নির্দেশ করে।

লারাভেলে পোস্টগ্রেস ড্রাইভার এবং সুপাবেস স্কিমা কনফিগার করুন

লারাভেলে, ডাটাবেস কনফিগারেশনের জন্য মূল ফাইলটি হলো config/database.php । যদিও আপনি ফ্রেমওয়ার্কের সাথে আসা pgsql ড্রাইভারটি সরাসরি ব্যবহার করতে পারেন, সুপাবেস (Supabase) নিয়ে কাজ করার সময় কিছু অতিরিক্ত সেটিংস প্রয়োগ করা প্রচলিত, বিশেষ করে স্কিমা এবং পোস্টগ্রেস-নির্দিষ্ট অপশনগুলোর ক্ষেত্রে।

লারাভেলে একটি সাধারণ পোস্টগ্রেস কনফিগারেশন 'connections' অ্যারের মধ্যে 'pgsql' কী-এর অধীনে দেখতে এইরকম হতে পারে :

'pgsql' => ,

এখানের মূল চাবিকাঠিটি হলো `search_path` প্যারামিটার । সুপাবেস ডিফল্টভাবে `public` স্কিমা ব্যবহার করে, যা এর এপিআইগুলোর মাধ্যমে উন্মুক্ত করা হয়। আপনি যদি আপনার লারাভেল অ্যাপ্লিকেশনকে সেই স্কিমা থেকে আলাদা রাখতে চান এবং টেবিল বা পলিসি সংক্রান্ত দ্বন্দ্ব এড়াতে চান, তাহলে `search_path` পরিবর্তন করে আপনার নিজের স্কিমা, যেমন `laravel` , ব্যবহার করার জন্য জোরালোভাবে সুপারিশ করা হচ্ছে, যেমনটি আগের উদাহরণে দেখা গেছে।

এইভাবে, আপনার প্রজেক্ট দ্বারা তৈরি মাইগ্রেশন এবং টেবিলগুলো পাবলিক স্কিমাতে নয়, বরং এই বিকল্প স্কিমাতে তৈরি হবে। এই পৃথকীকরণটি ডেটাবেসের কাঠামোকে সুসংগঠিত রাখার পাশাপাশি, অপ্রয়োজনীয় কিছু ওভাররাইট না করেই সুপাবেস প্যানেল থেকে সিকিউরিটি রুল, আরএলএস (RLS) এবং অ্যাক্সেস পরিচালনাকে ব্যাপকভাবে সহজ করে তোলে।

  অ্যাপাচি কাফকা এবং ফ্লিঙ্কে স্কিমা ব্যবস্থাপনা এবং পাইপলাইন অপ্টিমাইজেশন

কনফিগারেশন ফাইলটি ঠিক করার পর, আপনি সাধারণ লারাভেল কমান্ড ব্যবহার করে মাইগ্রেশনগুলো চালাতে পারবেন। এটি অথেনটিকেশন টেবিল এবং আপনার সংজ্ঞায়িত করা অন্য যেকোনো টেবিল তৈরি করবে। সবকিছু সঠিকভাবে কনফিগার করা থাকলে, কমান্ডগুলো স্বয়ংক্রিয়ভাবে সুপাবেস পোস্টগ্রেস সার্ভারে চলবে ।

মাইগ্রেশন সম্পন্ন হলে, `artisan serve` কমান্ড দিয়ে ডেভেলপমেন্ট সার্ভারটি চালু করুন এবং ব্যবহারকারীদের রেজিস্টার ও লগ ইন করার চেষ্টা করুন। যদি কোনো কানেকশন বা মাইগ্রেশন ত্রুটি না দেখা যায়, তার মানে হলো লারাভেল সুপাবেসের সাথে সঠিকভাবে যোগাযোগ করছে এবং আপনি যথারীতি আপনার বিজনেস লজিক তৈরি করা চালিয়ে যেতে পারেন।

লারাভেলে একটি নির্দিষ্ট সুপাবেস ড্রাইভার ব্যবহার করা

যদিও স্ট্যান্ডার্ড pgsql ড্রাইভারটি কাজ করে, লারাভেলের জন্য একটি সুপাবেস (supabase) ডাটাবেস ড্রাইভার যুক্ত করার প্যাকেজ রয়েছে , যা খুব দরকারি কিছু উন্নতির মাধ্যমে পোস্টগ্রেসকিউএল (PostgreSQL)-এর কার্যকারিতাকে প্রসারিত করে, বিশেষ করে UUID কলাম পরিচালনা এবং কোয়েরি গঠনের পদ্ধতির ক্ষেত্রে।

prahsys/laravel-supabase নামে বিতরণ করা এই প্যাকেজটি Composer-এর মাধ্যমে ইনস্টল করা হয় এবং supabase নামক একটি অতিরিক্ত ড্রাইভার রেজিস্টার করে, যা আপনি আপনার config/database.php ফাইলে ব্যবহার করতে পারেন। অভ্যন্তরীণভাবে, এটি Laravel-এর Postgres ড্রাইভারের উপর ভিত্তি করে তৈরি, কিন্তু এতে নির্দিষ্ট Supabase পরিবেশের জন্য অপ্টিমাইজ করা সেটিংস এবং কোয়েরি গ্রামার অন্তর্ভুক্ত করা হয়েছে।

একবার ইনস্টল হয়ে গেলে, আপনি সংযোগ বিভাগে নিম্নলিখিতের মতো কিছু ঘোষণা করতে পারেন :

'connections' => ,
    // otras conexiones...
],

এই ড্রাইভারটি ব্যবহারের সুবিধা হলো, আপনি পোস্টগ্রেস ইঞ্জিনের সম্পূর্ণ ক্ষমতা তো পানই, তার সাথে এটি স্বয়ংক্রিয়ভাবে সুপাবেসের কিছু সূক্ষ্ম বিষয়ও সামলে নেয়, বিশেষ করে যখন প্রাইমারি কী বা রিলেশনশিপ ফিল্ড হিসেবে UUID ব্যবহার করা হয় । এর ফলে প্রতিটি জটিল কোয়েরিতে ম্যানুয়ালি কাস্টিং লেখার প্রয়োজন হয় না।

এই প্যাকেজটি ফ্রেমওয়ার্ক এবং পিএইচপি-এর আধুনিক সংস্করণগুলোর সাথে ভালোভাবে খাপ খাইয়ে নেওয়ার জন্য ডিজাইন করা হয়েছে। এটি লারাভেল ১০.x, ১১.x ও ১২.x এবং পিএইচপি-এর ৮.১ সংস্করণ ও তার পরবর্তী সংস্করণগুলোর সাথে অফিশিয়াল সামঞ্জস্যতা প্রদান করে। এছাড়াও এটি সুপাবেস সহ যেকোনো স্ট্যান্ডার্ড পোস্টগ্রেসকিউএল (PostgreSQL) ডেটাবেসের সাথেও কাজ করে।

সবকিছু সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করতে, প্যাকেজটিতে একগুচ্ছ স্বয়ংক্রিয় টেস্ট অন্তর্ভুক্ত রয়েছে। আপনি `composer test` কমান্ড দিয়ে টেস্টগুলো চালাতে পারেন, যা দ্রুততার জন্য একটি ইন-মেমরি SQLite ডাটাবেস ব্যবহার করবে, অথবা আপনার Supabase-কে নির্দেশ করে একটি `.env.testing` ফাইল তৈরি করে `composer test-supabase` চালিয়ে রিমোট Postgres সহ একটি বাস্তব পরিবেশে এর আচরণ যাচাই করতে পারেন ।

সুপাবেস এবং লারাভেলে UUID ব্যবস্থাপনা

UUID কলামের ক্ষেত্রে সুপাবেসের একটি বিশেষত্ব রয়েছে: যদি আপনি কাস্টিং ছাড়া সরাসরি একটি টেক্সট স্ট্রিংয়ের সাথে একটি UUID তুলনা করার চেষ্টা করেন, তাহলে কোয়েরিটি ব্যর্থ হতে পারে বা অপ্রত্যাশিত ফলাফল দিতে পারে । একটি সাধারণ পোস্টগ্রেস পরিবেশে, আপনি গ্লোবাল কাস্ট বা কাস্টম অপারেটর ব্যবহার করে এর সমাধান করতে পারতেন, কিন্তু সুপাবেস এই ধরনের গ্লোবাল কাস্টমাইজেশনের অনুমতি দেয় না।

এর থেকে বোঝা যায় যে শৈলী সম্পর্কে একটি সরাসরি জিজ্ঞাসা:

SELECT *
FROM users
WHERE id = '123e4567-e89b-12d3-a456-426614174000';

এটি আপনার প্রত্যাশা অনুযায়ী কাজ করবে না । তবে, যদি আপনি সুস্পষ্ট কাস্টিং করেন:

SELECT *
FROM users
WHERE CAST(id AS TEXT) = '123e4567-e89b-12d3-a456-426614174000';

কোয়েরিটি সফল হয়েছে। সমস্যাটি হলো, লারাভেলে যখন আপনি Eloquent বা কোয়েরি বিল্ডার দিয়ে কোয়েরি লেখেন, তখন প্রতিটি WHERE ক্লজে CAST যোগ করতে চান না । এখানেই পূর্বোক্ত প্যাকেজের supabase ড্রাইভারটি কাজে আসে, যা আপনার জন্য সেই কাস্টগুলো যোগ করে দেয়।

ওই ড্রাইভারটি সক্রিয় থাকলে, আপনি নিম্নলিখিত সাধারণ কোয়েরিগুলো সম্পাদন করতে পারবেন:

$user = User::find($uuidString);
$user = User::where('id', $uuidString)->first();
$users = User::whereIn('id', )->get();

এবং শুধু সরাসরি কোয়েরিতেই নয়, জয়েনের ক্ষেত্রেও । উদাহরণস্বরূপ, যদি আপনি পোস্টগুলি পুনরুদ্ধার করতে এবং একটি UUID ফিল্ড ব্যবহার করে সেগুলিকে ইউজার্স টেবিলের সাথে জয়েন করতে চান, তাহলে আপনি এইরকম কিছু করতে পারেন:

$posts = Post::join('users', 'posts.user_id', '=', 'users.id')
    ->where('users.email', '[email protected]')
    ->get();

ড্রাইভারটি প্রাসঙ্গিক UUID কলামগুলিতে প্রয়োজনীয় টেক্সট কাস্টগুলি স্বচ্ছভাবে প্রয়োগ করে। এইভাবে, আপনার কোড লারাভেলের জন্য প্রচলিত রীতি মেনে চলে এবং প্রতিটি জটিল কোয়েরিতে আপনাকে সরাসরি SQL লিখতে বা অদ্ভুত কৌশল ব্যবহার করতে হয় না।

  সাবভার্সন এসভিএন: চূড়ান্ত সংস্করণ নিয়ন্ত্রণ ব্যবস্থা

কোন কলামগুলোকে UUID হিসেবে বিবেচনা করা হবে তার উপর যদি আপনি আরও সূক্ষ্ম নিয়ন্ত্রণ চান, তাহলে এই প্যাকেজটি আপনার Eloquent মডেলের জন্য CastsUuidColumns ট্রেইটটি প্রদান করে । কেবল আপনার মডেল ক্লাসে এটি ব্যবহার করুন এবং অতিরিক্ত কলামগুলোর একটি protected অ্যারে সংজ্ঞায়িত করুন:

use Prahsys\Supabase\Traits\CastsUuidColumns;

class Post extends Model
{
    use CastsUuidColumns;

    protected $uuidColumns = ;
}

এই ট্রেইটটি তিনটি গুরুত্বপূর্ণ কাজ করে: এটি প্রাইমারি কী-কে ডিফল্ট UUID হিসেবে অন্তর্ভুক্ত করে, আপনার ডিক্লেয়ার করা যেকোনো কলামকে `$uuidColumns` প্রপার্টিতে যোগ করে , এবং এই তথ্যটি কোয়েরি বিল্ডারের কাছে পৌঁছে দেয় যাতে এটি জানতে পারে কোথায় কাস্টগুলো প্রয়োগ করতে হবে। এর ফলে UUID-সম্পর্কিত সমস্ত ডেটা অ্যাক্সেস সামঞ্জস্যপূর্ণ এবং স্বয়ংক্রিয় হয় ।

আরও উন্নত ক্ষেত্রে , আপনি একটি কাস্টম UUID কলাম ডিটেক্টর রেজিস্টার করতে পারেন। প্যাকেজের PostgresGrammar ব্যবহার করে, আপনি একটি কলব্যাক ফাংশন নির্দিষ্ট করতে পারেন যা কলামের নাম বা কোয়েরি কনটেক্সটের উপর ভিত্তি করে সিদ্ধান্ত নেয় যে সেটিকে UUID হিসাবে গণ্য করা হবে কিনা। উদাহরণস্বরূপ:

use Prahsys\Supabase\Database\Query\Grammars\PostgresGrammar;

PostgresGrammar::detectUuidColumnsWith(function ($columnName, $query) {
    return str_contains($columnName, 'uuid_')
        || in_array($columnName, );
});

এই ফাংশনটি সেট আপ করা থাকলে, সিস্টেম আপনার প্রকল্পের অত্যন্ত নির্দিষ্ট নামকরণের রীতির সাথে খাপ খাইয়ে নিয়ে, সেইসব কলামকে UUID হিসেবে বিবেচনা করতে পারে, যাদের নামের একটি নির্দিষ্ট প্যাটার্ন রয়েছে অথবা যা একটি নির্দিষ্ট তালিকার অন্তর্ভুক্ত।

লারাভেলে সুপাবেস স্টোরেজকে একটি ফাইল সিস্টেম হিসেবে একীভূত করুন

ডাটাবেসের পাশাপাশি, অনেক প্রোজেক্টে ব্যবহারকারীদের আপলোড করা ছবি, ডকুমেন্ট বা অন্যান্য ফাইল সংরক্ষণ করার প্রয়োজন হয়। সুপাবেসে একটি বাকেট-ভিত্তিক স্টোরেজ পরিষেবা রয়েছে যা আপনি ফ্লাইসিস্টেমের মাধ্যমে লারাভেলের ডিস্ক হিসেবে ব্যবহার করতে পারেন । config/filesystems.php-এর মধ্যে সুপাবেস স্টোরেজকে একটি অতিরিক্ত ড্রাইভার হিসেবে ব্যবহার করার জন্য একটি নির্দিষ্ট অ্যাডাপ্টার উপলব্ধ রয়েছে।

এই প্যাকেজটি একটি ফ্লাইসিস্টেম অ্যাডাপ্টার প্রদান করে যা ফ্রেমওয়ার্কের স্টোরেজ সিস্টেমের সাথে নির্বিঘ্নে একীভূত হয়। এটি পিএইচপি >= ৮.১, লারাভেল ১০.x ও ১১.x এবং পিএইচপি ফাইলইনফো এক্সটেনশন (ext-fileinfo)-এর ন্যূনতম প্রয়োজনীয়তা পূরণ করে, যা লারাভেল সাধারণত ফাইল পরিচালনার জন্য সুপারিশ করে। কম্পোজার ব্যবহার করে এর ইনস্টলেশন করা হয় এবং একবার অন্তর্ভুক্ত হয়ে গেলে, আপনাকে কেবল কনফিগারেশনে সুপারবেস ডিস্কটি সংজ্ঞায়িত করতে হবে।

config/filesystems.php ফাইলের disks অ্যারের মধ্যে , আপনাকে নিচের মতো কিছু যোগ করতে হবে:

'supabase' => ,
    ],
    'signedUrlExpires' => 60 * 60 * 24,
],

`bucket` প্যারামিটারটি সাধারণত সুপাবেস ড্যাশবোর্ডে আপনার তৈরি করা স্টোরেজ বাকেটের নাম হয়ে থাকে (উদাহরণস্বরূপ, `myapp-file-uploads`)। `endpoint` হলো প্রোজেক্টের স্টোরেজ সার্ভিসের বেস ইউআরএল, যা ড্যাশবোর্ডের সংশ্লিষ্ট অংশেও দেখা যায় এবং এটি সাধারণত প্রোজেক্ট ইউআরএল ও রিজিয়ন থেকে নেওয়া হয়।

`public` অপশনটি নির্দেশ করে যে বাকেটের বিষয়বস্তু ডিফল্টরূপে পাবলিক হিসেবে গণ্য হবে কিনা। যদি `true` হয়, অ্যাডাপ্টারটি কোনো বিশেষ স্বাক্ষর ছাড়াই অ্যাক্সেসযোগ্য URL তৈরি করবে; যদি `false` হয়, তাহলে `defaultUrlGeneration` অপশনটি কার্যকর হবে, যা `signedUrlExpires` দ্বারা নির্দিষ্ট মেয়াদসহ স্বাক্ষরিত URL তৈরি করতে বাধ্য করতে পারে। এই কনফিগারেশনটি আপনাকে আপনার ব্যবহৃত ফাইলের ধরনের উপর নির্ভর করে নিরাপত্তা এবং সুবিধার মধ্যে ভারসাম্য বজায় রাখতে সাহায্য করে।

সাধারণ ডিস্ক ইউআরএল সাধারণত নাল (null) রাখা হয়, যাতে অ্যাডাপ্টার স্বয়ংক্রিয়ভাবে এন্ডপয়েন্ট থেকে এটি তৈরি করে নেয়। আপনার কেবল তখনই এটি পরিবর্তন করা উচিত, যদি আপনি কোনো মধ্যবর্তী প্রক্সি বা সিডিএন ব্যবহার করেন এবং চান যে তৈরি হওয়া রাউটগুলো নেটিভ সুপাবেস ডোমেইনের পরিবর্তে সেই ডোমেইনকে নির্দেশ করুক।

আপলোড ত্রুটির সমস্যা সমাধান করুন এবং Supabase স্টোরেজের মূলনীতিটি বুঝুন

লারাভেল থেকে সুপাবেস স্টোরেজে ফাইল আপলোড করার চেষ্টা করার সময় একটি বেশ সাধারণ সমস্যা হলো “Unable to write file at location: uploads/…” এর মতো বার্তা পাওয়া । এর থেকে সাধারণত বোঝা যায় যে, ড্রাইভারটি কনফিগার করা থাকা সত্ত্বেও, অপর্যাপ্ত অনুমতি বা ভুল কী কনফিগারেশনের কারণে সুপাবেস লেখার কাজটি করতে বাধা দিচ্ছে।

সুপাবেস ডিস্ক কনফিগারেশন ফাইল `config/filesystems.php`- এর `key` ফিল্ডে একটি "প্রিভিলেজড কী" ব্যবহারের কথা নির্দিষ্ট করে বলা আছে এবং স্পষ্টভাবে উল্লেখ করা হয়েছে যে একটি রিড-অনলি কী কাজ করবে না। এর মানে হলো, আপনাকে বাকেটে লেখার অনুমতিসহ একটি সার্ভিস কী ব্যবহার করতে হবে; শুধুমাত্র পরিবর্তনের অনুমতি ছাড়া কোনো ক্লায়েন্ট-সাইড পাবলিক এপিআই কী বা এস৩ কম্প্যাটিবিলিটি কী ব্যবহার করলে চলবে না।

সুপাবেস প্যানেলে, এপিআই এবং স্টোরেজ কনফিগারেশন বিভাগের মধ্যে, আপনি অ্যানোনিমাস কী এবং সার্ভিস_রোল কী (বা তাদের সমতুল্য) উভয়ই পাবেন , যেগুলোর বর্ধিত সুবিধা রয়েছে। এই সার্ভিস কী-টিই, পাবলিক কী-টি নয়, আপনাকে SUPABASE_SECRET_ACCESS_KEY ভেরিয়েবলে রাখতে হবে, যা ড্রাইভার পরবর্তীতে env('SUPABASE_SECRET_ACCESS_KEY') ব্যবহার করে পড়ে নেবে।

  ডাটাবেস মডেল: আপনার প্রকল্পের জন্য সেরাটি কীভাবে বেছে নেবেন

আপনি যদি স্টোরেজ কনফিগারেশনের S3 কী অথবা প্রজেক্টের জেনেরিক API কী ব্যবহার করে পরীক্ষা করে থাকেন, তাহলে খুব সম্ভবত সেই ক্রেডেনশিয়ালগুলোর নির্দিষ্ট বাকেটে লেখার অনুমতি নেই, যার ফলে রাইট এরর হচ্ছে। কী ভ্যালুটি পরিবর্তন করে লেখার অনুমতিসহ একটি বৈধ সার্ভিস কী ব্যবহার করলে এবং বাকেটটির অস্তিত্ব ও সঠিক নামকরণ নিশ্চিত করলে সাধারণত সমস্যাটির সমাধান হয়ে যায়।

পাসওয়ার্ডের পাশাপাশি, এটি যাচাই করা গুরুত্বপূর্ণ যে SUPABASE_STORAGE_BUCKET-এ সংজ্ঞায়িত বাকেটটি সুপাবেস ইন্টারফেসে তৈরি করা বাকেটের সাথে হুবহু মেলে কিনা, যেখানে বড় ও ছোট হাতের অক্ষরের ব্যবহারও সঠিক থাকে, এবং এন্ডপয়েন্টটি সেই স্টোরেজ ইনস্ট্যান্সের সঠিক URL-এর সাথে সঙ্গতিপূর্ণ কিনা। একটি অতিরিক্ত অক্ষর বা ভুল ডোমেইনের মতো কোনো খুঁটিনাটি বিষয় অ্যাডাপ্টারকে ফাইলগুলির প্রকৃত গন্তব্য খুঁজে পেতে বাধা দিতে পারে ।

লারাভেল ব্রীজ, ব্লেড এবং সুপাবেস স্টোরেজ সহ কর্মপ্রবাহ

আপনার ডাটাবেস এবং স্টোরেজ কনফিগার করা হয়ে গেলে, পরবর্তী যৌক্তিক পদক্ষেপ হলো আপনার লারাভেল ব্রিজ ইন্টারফেস এবং ব্লেড টেমপ্লেটের সাথে সবকিছু একীভূত করা । এইভাবে, ব্যবহারকারীরা লারাভেল ইকোসিস্টেমের বাইরে না গিয়েই সুপাবেসে নিবন্ধন, প্রমাণীকরণ এবং ফাইল আপলোড করতে পারবেন।

আপনার কন্ট্রোলারগুলোর মধ্যে, আপনি সুপারবেস ডিস্ককে নির্দেশ করে স্টোরেজ ফ্যাসাড ব্যবহার করবেন । উদাহরণস্বরূপ, ফাইল ইনপুট সহ একটি ফর্ম থেকে প্রাপ্ত ফাইল আপলোড করতে, আপনি এইরকম কিছু করতে পারেন:

if ($request->hasFile('file')) {
    $path = $request->file('file')
        ->store('uploads', 'supabase');
}

এই কোডটি লারাভেলকে সুপাবেস ডিস্ক ব্যবহার করতে এবং কনফিগার করা বাকেটের ভেতরের ভার্চুয়াল আপলোডস ফোল্ডারে ফাইলটি রাখতে নির্দেশ দেয়। যদি কী (key) এবং এন্ডপয়েন্ট (endpoint) সঠিক হয়, তাহলে ফাইলটি সুপাবেস স্টোরেজে আপলোড হয়ে যাবে এবং আপনি প্রচলিত স্টোরেজ পদ্ধতি ব্যবহার করে এর পাথ (path) পুনরুদ্ধার করতে বা পাবলিক অথবা সাইনড ইউআরএল (public or signed URLs) তৈরি করতে পারবেন।

এই পদ্ধতির সুবিধা হলো, আপনার অ্যাপ্লিকেশনটি স্টোরেজের জন্য একটিমাত্র ইন্টারফেস বজায় রাখে, তা লোকাল ডিস্ক, অ্যামাজন এস৩, সুপাবেস বা অন্য কোনো সমর্থিত পরিষেবা ব্যবহার করুক না কেন। প্রোভাইডার পরিবর্তন করার জন্য শুধু config/filesystems.php এবং এনভায়রনমেন্ট ভেরিয়েবলগুলো সমন্বয় করতে হয়, যা বিজনেস লজিককে প্রভাবিত করে না।

ব্লেড এবং ব্রিজের সাথে এটিকে একত্রিত করে, আপনি আপনার অ্যাপ্লিকেশনের ব্যবহারকারীর অভিজ্ঞতার সাথে সম্পূর্ণরূপে সমন্বিত আপলোড ফর্ম, ফাইলের তালিকা এবং ডাউনলোড লিঙ্ক প্রদান করতে পারেন। অধিকন্তু, সুপাবেস স্টোরেজের বাকেট- এবং পলিসি-ভিত্তিক পদ্ধতি আপনাকে এর অ্যাক্সেস কন্ট্রোল এবং নিরাপত্তা নিয়ম ব্যবহার করে নির্ধারণ করতে দেয় যে প্রতিটি ব্যবহারকারী কী দেখতে বা ডাউনলোড করতে পারবে।

প্যাকেজ, ড্রাইভার এবং কনফিগারেশনের এই সম্পূর্ণ ইকোসিস্টেমটি লারাভেলকে সুপাবেসের সাথে নির্বিঘ্নে কাজ করতে সক্ষম করে, যা পোস্টগ্রেসের সাথে রিলেশনাল ডেটা এবং ফাইল স্টোরেজ ও UUID ম্যানেজমেন্ট— উভয় ক্ষেত্রেই প্রযোজ্য। কী, স্কিমা এবং ড্রাইভারগুলোকে সঠিকভাবে কনফিগার করার মাধ্যমে একটি অত্যন্ত শক্তিশালী ইন্টিগ্রেশন অর্জন করা যায়, যা এই সহায়ক স্তরগুলো ছাড়া ম্যানুয়ালি উভয় প্ল্যাটফর্মকে সংযুক্ত করার চেষ্টার সময় সম্মুখীন হওয়া অনেক সাধারণ ত্রুটি এড়াতে সাহায্য করে।

ডাটাবেস ও স্টোরেজের জন্য লারাভেলকে সুপাবেসের সাথে সংযুক্ত করা, ঝামেলাহীনভাবে UUID ম্যানেজ করার জন্য ডেডিকেটেড সুপাবেস ড্রাইভার ব্যবহার করা এবং স্টোরেজের জন্য ফ্লাইসিস্টেম অ্যাডাপ্টার ব্যবহারের মাধ্যমে আপনি এমন আধুনিক অ্যাপ্লিকেশন তৈরি করতে পারেন, যেখানে মাইগ্রেশন ও অথেন্টিকেশন থেকে শুরু করে সুরক্ষিত বাকেটে ফাইল আপলোড করা পর্যন্ত সমস্ত জটিল পরিকাঠামো লারাভেলের পরিচ্ছন্ন এপিআই-এর আড়ালে আবদ্ধ থাকে।

লারাভেলে ব্লেড হ্যাস্ট্যাক নির্দেশিকা
সম্পর্কিত নিবন্ধ:
ব্লেড ডিরেক্টিভিটিতে লারাভেলে স্ট্যাক এবং অ্যাডভান্সড স্ট্যাক কন্ট্রোল রয়েছে।