フォルダー名がc
小文字になっているのはなぜcontrollers
ですか?Model、Block、Helperは大文字で始まりますか?
フォルダー名がc
小文字になっているのはなぜcontrollers
ですか?Model、Block、Helperは大文字で始まりますか?
回答:
controllers
フォルダにあるクラスは、特別な種類のクラスです。タグin
を使用してモデルまたはブロックを書き換えるのと同じ方法でそれらを書き換えることはできません。モデル()またはヘルパー()またはブロック()を使用して、ファクトリを使用してインスタンス化することはできません。
ありますが、それは少し異なります。これについては後で詳しく説明します。
他のクラスのように、実際には命名規則に従っていないことに気付くかもしれません。
作品はクラス名に見つかりません。
たとえば、にあるコントローラーを見てみましょう。
クラス名はです。
100%確実な答えを出すことはできません。コア開発者のみがそれを行うことができます。<rewrite>
config.xml
Mage::getModel()
Mage::helper
Mage::app()->getLayout()->createBlock()
Mage::getControllerInstance()
controllers
Mage/Catalog/controllers/CategoryController.php
Mage_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
controllers
Mageコアチームはzendフレームワークの専門家だと思います。称賛。そのリンクを共有してくれてありがとう