フォルダー名がc小文字になっているのはなぜcontrollersですか?Model、Block、Helperは大文字で始まりますか?
フォルダー名がc小文字になっているのはなぜcontrollersですか?Model、Block、Helperは大文字で始まりますか?
回答:
controllersフォルダにあるクラスは、特別な種類のクラスです。タグin
を使用してモデルまたはブロックを書き換えるのと同じ方法でそれらを書き換えることはできません。モデル()またはヘルパー()またはブロック()を使用して、ファクトリを使用してインスタンス化することはできません。
ありますが、それは少し異なります。これについては後で詳しく説明します。
他のクラスのように、実際には命名規則に従っていないことに気付くかもしれません。
作品はクラス名に見つかりません。
たとえば、にあるコントローラーを見てみましょう。
クラス名はです。
100%確実な答えを出すことはできません。コア開発者のみがそれを行うことができます。<rewrite>config.xmlMage::getModel()Mage::helperMage::app()->getLayout()->createBlock()Mage::getControllerInstance()controllersMage/Catalog/controllers/CategoryController.phpMage_Catalog_CategoryController
しかし、私の想定では、誰かがコントローラーを自動ロードすることを望まなかったということです。
このメソッドを見てください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ます。
サイドノート:一部のモジュールにはController(大文字のCで)と呼ばれるフォルダーがあり、クラスは標準のクラス命名に従います。これらのクラスは実際にはコントローラーではありません。これらは、モジュール内の他のコントローラーの親クラスとして、またはルーターとして使用されます。
サイドノート2:これはMagento 2には存在しません。すべてのコントローラーはControllerフォルダーにあります。
マリウスあなたはとても素晴らしいです:D
私の答えはただだったでしょう:
これはZend Frameworkの標準です:http : //framework.zend.com/manual/1.12/en/zend.controller.quickstart.html
controllersMageコアチームはzendフレームワークの専門家だと思います。称賛。そのリンクを共有してくれてありがとう