কীভাবে ড্রুপাল ক্লাসগুলির অটোলয়েডিং পরিচালনা করে?


10

কীভাবে দ্রুপাল মডিউলগুলির মাধ্যমে ক্লাসগুলির অটোলয়েডিং পরিচালনা করে? উদাহরণস্বরূপ, যদি আমার একটি ইভেন্ট মডিউল থাকে এবং আমি ইভেন্ট নামে একটি শ্রেণি ঘোষণা করি এবং তারপরে .info ফাইলে আমি ক্লাস ফাইল অন্তর্ভুক্ত করি তবে এটি কীভাবে নিবন্ধিত?

সমস্যাটি হ'ল আমি গতিতে সমস্ত লোড শ্রেণীর নাম সম্বলিত একটি অ্যারে পাওয়ার চেষ্টা করছি। get_dlala_Class () এইভাবে ঘোষিত আমার সমস্ত শ্রেণীর নাম ফেরত দেয় না, তাই আমি ধরে নিচ্ছি যে তারা কোনওভাবে অটোলায়েড হয়েছে। অন্য স্ট্যাক ওভারফ্লো প্রশ্ন থেকে পরামর্শ অনুসরণ করে, আমি তাদের সবগুলি spl_autoload_function () দিয়ে পাওয়ার চেষ্টা করেছি , তবে এটিও ব্যর্থ হয়েছিল।

কোন ধারনা?

উত্তর:


13

মডিউলগুলি পুনর্নির্মাণ করা হয় .info ফাইলগুলিতে তালিকাভুক্ত সমস্ত ফাইল পার্স করা হয় (পারফরম্যান্সের কারণে কেবলমাত্র সেই তালিকাতে পরিবর্তিত / নতুন ফাইলগুলি হয়)।

এরপরে তথ্যটি টেবিল {registry}এবং {registry_files}সারণীতে সংরক্ষণ করা হয় । সুতরাং আপনি যদি সমস্ত শ্রেণি বা একটি প্রদত্ত নামকরণের ধরণ অনুযায়ী এইগুলি পেতে চান তবে আপনি এই টেবিলগুলিকে জিজ্ঞাসা করতে পারেন।


7

দ্রুপাল একটি কোড রেজিস্ট্রি বজায় রাখে এবং এর ক্লাসগুলির জন্য এটি ব্যবহার করে olo আপনার মডিউলটির ক্লাসগুলির সাথে এই রেজিস্ট্রিটি স্থাপন করতে, আপনার .info ফাইলে ফাইলগুলি [] এন্ট্রিগুলিতে তাদের ফাইলগুলি যুক্ত করা উচিত:

files[] = includes/Foo.inc
files[] = includes/Bar.inc

পিএইচপি-র শ্রেণীর অটোলয়েডিং নিশ্চিত করবে যে পিতামাতার ক্লাস ফাইলটিও লোড হয়েছে।

এই উত্তরের জন্য ব্যবহারকারী পিয়ের-বুইলে ক্রেডিট, একই প্রশ্নের জন্য এখানে তার আসল উত্তরটি দেখুন ।

আশা করি এইটি কাজ করবে


5

spl_autoload_functions()নিবন্ধভুক্ত অটোল্যাড ফাংশনগুলির তালিকা প্রদান করে spl_autoload_register()। ড্রুপাল দুটি অটোল্যাড ফাংশন নিবন্ধভুক্ত করে: একটি ক্লাসের জন্য ( drupal_autoload_class () ), এবং একটি ইন্টারফেসের জন্য ( drupal_autoload_interface () )।

উভয় ফাংশন _registry_check_code () ব্যবহার করে ; এর কোড ব্যবহার করে, আপনি একটি ফাংশন লিখতে পারেন যা ড্রুপাল 7 মডিউল দ্বারা প্রয়োগ করা সমস্ত শ্রেণীর তালিকা করে।


3

আপনি যদি .info ফাইলের [] অ্যারে ফাইলগুলিতে একটি এন্ট্রি যুক্ত করেছেন, আপনাকে আপনার মডিউল প্রশাসন বিভাগে যেতে হবে এবং "সংরক্ষণ কনফিগারেশন" এ ক্লিক করতে হবে। এটি তথ্য তথ্য রিফ্রেশ করতে ড্রুপাল পাবেন এবং নতুন এন্ট্রি নিবন্ধিত হবে।


1

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

include_once ('CMatArticleHandler.inc');

পূর্বে $ ভেরিয়েবল = নতুন ইভেন্ট (); লাইন। আমি এতে নতুন তাই এর থেকেও এটি আরও বেশি হতে পারে তবে এটি এখন পর্যন্ত কাজ করেছে।


1
সত্যিই দুর্ভাগ্য যে এটি করার প্রয়োজন এড়াতে লোকেরা কী করতে হবে তা ব্যাখ্যা করার পরিবর্তে এটিকে হ্রাস করে। আমি একই পরিস্থিতিতে আছি: দ্রুপালের অটোলোডার একটি শ্রেণি পেতে কোনও ফাইল লোড করার প্রয়োজনটিকে ধারাবাহিকভাবে স্বীকৃতি দিচ্ছে না।
গ্রেগলেস

নতুন ক্লাস যুক্ত করার সময় একজনকে রেজিস্ট্রি সাফ করা দরকার। একটি সহজ উপায় করতে othis মাধ্যমে drush এই কমান্ড দিয়ে হল: drupal.org/project/registry_rebuild
stefgosselin
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.