সি কেন ম্যাগান্টোর কন্ট্রোলারে ছোট হয়?


28

ফোল্ডারের নামে cছোট হাত কেন controllers? যেখানে মডেল, ব্লক এবং সহায়ক একটি বড় হাতের অক্ষর দিয়ে শুরু হচ্ছে?


6
আরে ... ডাউনটা কেন? এটি একটি বৈধ এবং আসলে ভাল প্রশ্ন।
মারিয়াস

একজন সদস্য আছেন (আমি অবশ্যই নামটি বলব না) যিনি এলোমেলোভাবে পতাকাঙ্কিত / ডাউনওয়েটিং করছেন। উদাহরণস্বরূপ এই প্রশ্নটি আপত্তিকর হিসাবে চিহ্নিত করা হয়েছিল: ডি
ব্যবহারকারী 487772

@ টিমবেজাশভ্যালি ... হ্যাঁ আমি তা বুঝতে পেরেছি। এটি শুরুতে আমার কাছে আক্রমণাত্মক হয়ে উঠল তবে আমি আবার প্রশ্নটি পড়েছিলাম :)
মারিয়াস

একটি মূলধন সি সহ নিয়ন্ত্রক ইতিমধ্যে হা হা নেওয়া হয়েছিল।
জুলিয়েন লাচাল

উত্তর:


28

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ফোল্ডারে অবস্থিত ।


15

মারিয়াস আপনি এত দুর্দান্ত: ডি

আমার উত্তরটি কেবল এইভাবে হত:

এটি জেন্ডার ফ্রেমওয়ার্ক মান: http://framework.zend.com/manual/1.12/en/zend.controller.quickstart.html


1
এটি আসলে একটি ভাল উত্তর।
মারিয়াস

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

খুব সাহায্য করুন পুরো
অমিত বেরা

1
হ্যাঁ আমি মনে করি এটিও সঠিক উত্তর। আমি জেডএফ স্ট্যান্ডার্ডগুলি দেখার চেষ্টাও করি নি। আমি কেবল একটি যৌক্তিক ব্যাখ্যা সন্ধান করার চেষ্টা করেছি। আমার প্রতিরক্ষায় আমি উত্তরে বলেছিলাম যে এটি আমার মতামত।
মারিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.