ফোল্ডারের নামে cছোট হাত কেন controllers? যেখানে মডেল, ব্লক এবং সহায়ক একটি বড় হাতের অক্ষর দিয়ে শুরু হচ্ছে?
ফোল্ডারের নামে cছোট হাত কেন controllers? যেখানে মডেল, ব্লক এবং সহায়ক একটি বড় হাতের অক্ষর দিয়ে শুরু হচ্ছে?
উত্তর:
controllersফোল্ডারে অবস্থিত ক্লাসগুলি ক্লাসগুলির একটি বিশেষ জাত।
আপনি <rewrite>ট্যাগটি ব্যবহার করে কোনও মডেল বা ব্লককে পুনরায় লেখার মতোভাবে সেগুলি পুনরায় লিখতে পারবেন না config.xml, আপনি মডেলগুলির জন্য কারখানা ব্যবহার করে ( Mage::getModel()) বা সহায়ক ( Mage::helper) বা ব্লক ( Mage::app()->getLayout()->createBlock()) সহ তাদের ব্যবহার করতে পারেন না ।
আমি বলতে চাইছি Mage::getControllerInstance()কিন্তু এটি কিছুটা আলাদা। এই সম্পর্কে আরও পরে।
আপনি লক্ষ্য করতে পারেন যে তারা অন্যান্য শ্রেণীর মতো নামকরণের নিয়মটি অনুসরণ করে না follow ক্লাসের নামটিতে
কাজটি controllersপাওয়া যায় না।
এর উদাহরণস্বরূপ নেওয়া যাক নিয়ামক পাওয়া যায় Mage/Catalog/controllers/CategoryController.php।
ক্লাসের নাম Mage_Catalog_CategoryController।
আমি আপনাকে 100% নির্দিষ্ট উত্তর দিতে পারি না, কেবল একটি কোর দেব এটি করতে পারেন।
তবে আমার ধারণাটি হ'ল যে কেউ চাননি যে নিয়ন্ত্রণকারীরা স্বয়ংক্রিয়ভাবে চালিত হোক।
এই পদ্ধতিটি একবার দেখুন Mage_Core_Controller_Varien_Router_Standard::match। এটি বড় এবং ভীতিজনক, তবে এটিই হ'ল নিয়ামক এবং ক্রিয়াতে url মানচিত্র।
অনেকগুলি গণনা করা হয়েছে তবে কোথাও এই লাইনটি রয়েছে:
$controllerClassName = $this->_validateControllerClassName($realModule, $controller);
আমরা যদি গভীর গভীর খনন করি তবে _validateControllerClassNameআপনি getControllerFileNameদেখতে পাবেন:
public function getControllerFileName($realModule, $controller)
{
$parts = explode('_', $realModule);
$realModule = implode('_', array_splice($parts, 0, 2));
$file = Mage::getModuleDir('controllers', $realModule);
if (count($parts)) {
$file .= DS . implode(DS, $parts);
}
$file .= DS.uc_words($controller, DS).'Controller.php';
return $file;
}
এবং _includeControllerClassমূলত এই আছে: include $controllerFileName;।
controllersপদ্ধতিতে হার্ড কোডড getControllerFileNameএবং লক্ষ্য করুন যে কন্ট্রোলার ফাইলটি কেবল অন্তর্ভুক্ত রয়েছে। সুতরাং কোনও অটোলয়েডিং নেই।
অবশেষে, কন্ট্রোলার কারখানাটি Mage::getControllerInstance()ক্লাসটি সনাক্ত করে না এবং পুনর্লিখনগুলিতে সন্ধান করে না। এটি ঠিক return new $class($request, $response, $invokeArgs);যেখানে $classনিয়ন্ত্রক শ্রেণি রয়েছে does
পার্শ্ব দ্রষ্টব্য : কিছু মডিউলগুলিতে একটি ফোল্ডার Controller(মূলধন সি সহ) থাকে এবং ক্লাসগুলি স্ট্যান্ডার্ড শ্রেণীর নামকরণ অনুসরণ করে। এই ক্লাসগুলি আসলেই নিয়ামক নয়। এগুলি মডিউলে বা রাউটার হিসাবে অন্যান্য নিয়ামকদের জন্য পিতামাতার ক্লাস হিসাবে ব্যবহৃত হয়।
পার্শ্ব নোট 2 : এটি ম্যাজেন্টো ২ তে বিদ্যমান নেই All সমস্ত কন্ট্রোলার Controllerফোল্ডারে অবস্থিত ।
মারিয়াস আপনি এত দুর্দান্ত: ডি
আমার উত্তরটি কেবল এইভাবে হত:
এটি জেন্ডার ফ্রেমওয়ার্ক মান: http://framework.zend.com/manual/1.12/en/zend.controller.quickstart.html
controllersএবং আমি ধরেই নিয়েছি ম্যাগজ কোর দলটি জেন্ড ফ্রেমওয়ার্ক বিশেষজ্ঞ হবে। যশ। সেই লিঙ্কটি ভাগ করে নেওয়ার জন্য ধন্যবাদ