আমি ভেবেছিলাম যে এখানে কী ঘটছে তার কিছুটা ব্যাখ্যা দেওয়ার জন্য ভবিষ্যতের দর্শকদের পক্ষে এটি কার্যকর হবে।
Illuminate\Http\Requestশ্রেণী
লারাভেলের Illuminate\Http\Requestক্লাসের একটি পদ্ধতি রয়েছে যার নাম রয়েছে all(বাস্তবে allপদ্ধতিটি এমন একটি বৈশিষ্ট্যে সংজ্ঞায়িত করা হয় যা Requestশ্রেণিটি ব্যবহার করে, বলা হয় Illuminate\Http\Concerns\InteractsWithInput)। allলেখার সময় পদ্ধতির স্বাক্ষরটি দেখে মনে হচ্ছে:
public function all($keys = null)
এই পদ্ধতিটি সংজ্ঞায়িত করা হয়নি staticএবং তাই আপনি যখন কোনও স্থিতিক প্রসঙ্গে পদ্ধতিটিকে কল করার চেষ্টা করেন, অর্থাত Illuminate\Http\Request::all()আপনি ওপির প্রশ্নে ত্রুটিটি প্রদর্শিত হবে। allপদ্ধতি একটি দৃষ্টান্ত পদ্ধতি ও তথ্য যে একটি দৃষ্টান্ত উপস্থিত সঙ্গে পুলিশ যে Requestএই ভাবে এটি আহ্বান, যাতে কোন জ্ঞান করে তোলে, বর্গ।
মুখোমুখি
লারাভেলের একটি মুখোমুখি বিকাশকারীদের আইওসি পাত্রে আইটেম অ্যাক্সেস করার সুবিধাজনক উপায় এবং সেই সমস্ত বিষয়গুলিতে কল করার পদ্ধতি সরবরাহ করে। একটি ডেভেলপার একটি পদ্ধতি "স্ট্যাটিক্যালি" এর মতো একটি ছদ্মরূপ কল করতে পারেন Request::all(), কিন্তু প্রকৃত পদ্ধতি কল বাস্তব Illuminate\Http\Request বস্তুর না স্ট্যাটিক।
একটি মুখোমুখি প্রক্সিটির মতো কাজ করে - এটি আইওসি পাত্রে থাকা কোনও বস্তুকে বোঝায় এবং স্ট্যাটিক পদ্ধতি কলটি সেই বস্তুর (অ স্থিরভাবে) পাস করে। উদাহরণস্বরূপ, Illuminate\Support\Facades\Requestসম্মুখ মুখটি ধরুন, এটি দেখতে এটির মতো দেখাচ্ছে:
class Request extends Facade
{
protected static function getFacadeAccessor()
{
return 'request';
}
}
হুডের নীচে, বেস Illuminate\Support\Facades\Facadeক্লাসটি কিছু পিএইচপি যাদু ব্যবহার করে, যথা __callStatic:
- কোনও স্ট্রাইক পদ্ধতি কলের জন্য শুনুন,
allকোনও পরামিতি ছাড়াই
- কী দ্বারা ফিরে ব্যবহার আইওসি ধারক থেকে নিম্নাবস্থিত বস্তুর দখল
getFacadeAccessor, এই ক্ষেত্রে একটি Illuminate\Http\Requestবস্তুর
- এটি পুনরুদ্ধার করা বস্তুর উপর স্থিতিশীলভাবে প্রাপ্ত পদ্ধতিটিকে गतिशीलভাবে কল করুন, এক্ষেত্রে
allউদাহরণ হিসাবে অ-স্থিতিকরূপে বলা হয় Illuminate\Http\Request।
এই কারণেই, @ পেট্রিকাস তার উত্তরটিতে উল্লিখিত হিসাবে, সম্মুখস্থকে উল্লেখ করার জন্য use/ আমদানির বিবৃতি পরিবর্তন করে , ত্রুটিটি আর নেই, কারণ পিএইচপি সম্পর্কিত, allযথাযথভাবে একটি উদাহরণ হিসাবে ডাকা হয়েছিল Illuminate\Http\Request।
এলিয়াসিং
এলিয়াসিং হ'ল আরেকটি বৈশিষ্ট্য যা লারাভেল সুবিধার জন্য সরবরাহ করে। এটি কার্যকরভাবে ওরফে ক্লাস তৈরি করে কাজ করে যা রুট নেমস্পেসের সম্মুখিন দিকে নির্দেশ করে। কীটির config/app.phpনীচে যদি আপনি আপনার ফাইলটি একবার দেখুন aliases, আপনি স্টেক্স ক্লাসে স্ট্রিংয়ের ম্যাপিংয়ের একটি দীর্ঘ তালিকা পাবেন। উদাহরণ স্বরূপ:
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Request' => Illuminate\Support\Facades\Request::class,
লারাভেল আপনার কনফিগারেশনের উপর ভিত্তি করে আপনার জন্য এই উপন্যাস ক্লাস তৈরি করে এবং এটি আপনাকে মূল নামস্থানে উপলব্ধ কনফিগারগুলি ( aliasesকনফিগারেশনের স্ট্রিং কীগুলি দ্বারা উল্লেখ করা হয় ) এমনভাবে ব্যবহার করতে দেয় যেন আপনি নিজেই মুখোমুখি ব্যবহার করছেন:
use Request:
class YourController extends Controller
{
public function yourMethod()
{
$input = Request::all();
}
}
নির্ভরতা ইনজেকশন উপর একটি নোট
লারাভেলে এখনও ফেসেড এবং এলিয়জিং সরবরাহ করা হলেও এটি সম্ভব এবং সাধারণত নির্ভরতা ইনজেকশন রুটে যেতে উত্সাহিত করা হয়। উদাহরণস্বরূপ, একই ফলাফল অর্জন করতে কনস্ট্রাক্টর ইঞ্জেকশন ব্যবহার করা:
use Illuminate\Http\Request;
class YourController extends Controller
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function yourMethod()
{
$input = $this->request->all();
}
}
এই পদ্ধতির অনেকগুলি সুবিধা রয়েছে তবে আমার ব্যক্তিগত মতামত নির্ভরতা ইনজেকশনটির সর্বাধিক পক্ষে হ'ল এটি আপনার কোডটিকে পরীক্ষা করার সহজতর করে তোলে। আপনার শ্রেণীর নির্ভরতা নির্মাতা বা পদ্ধতির আর্গুমেন্ট হিসাবে ঘোষণা করে, সেই নির্ভরতাগুলি উপহাস করা এবং এককভাবে আপনার ক্লাসের পরীক্ষাটি ক্লাস করা খুব সহজ হয়ে যায়।