Magento의 컨트롤러에서 c가 소문자 인 이유는 무엇입니까?


28

폴더 이름 이 c소문자 인 이유는 무엇 controllers입니까? Model, Block 및 Helper는 대문자로 시작하는 반면?


6
이봐 ... 왜 downvote? 이것은 합법적이고 실제로 좋은 질문입니다.
Marius

무작위로 깃발을 신고하거나 내리는 회원이 있습니다 (물론 이름은 말하지 않겠습니다). 예를
들어이

@TimBezhashvyly ... 네 이해합니다. 처음에는 나에게 불쾌감을 주었지만 다시 질문을 읽었습니다. :)
Marius

대문자 C를 가진 컨트롤러는 이미 하하를 차지했습니다.
Julien Lachal

답변:


28

에 위치한 클래스 controllers폴더 클래스의 특별한 품종이다.
<rewrite>태그를 사용하여 모델 또는 블록을 다시 쓰는 것과 같은 방식으로 다시 작성할 config.xml수 없으며 모델 ( Mage::getModel()) 또는 도우미 ( Mage::helper) 또는 블록 ( Mage::app()->getLayout()->createBlock())에서 와 같이 팩토리를 사용하여 인스턴스화 할 수 없습니다 .
나는 그것이 Mage::getControllerInstance()있지만 조금 다릅니다. 이것에 대해서는 나중에 더 설명하겠습니다.
실제로 다른 클래스와 같은 이름 지정 규칙을 따르지 않는 것을 알 수 있습니다. 수업 이름에
작품 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?

참고 : 일부 모듈에는 Controller(자본 C 포함) 이라는 폴더가 있으며 클래스는 표준 클래스 이름을 따릅니다. 이러한 클래스는 실제로 컨트롤러가 아닙니다. 모듈의 다른 컨트롤러에 대한 상위 클래스 또는 라우터로 사용됩니다.

참고 2 : Magento 2에는 존재하지 않습니다. 모든 컨트롤러는 Controller폴더에 있습니다.


15

마리우스 당신은 너무 위대한 : D

내 대답은 다음과 같습니다.

이것이 Zend Framework 표준입니다 : http://framework.zend.com/manual/1.12/en/zend.controller.quickstart.html


1
실제로 좋은 대답입니다.
Marius

1
이것은 아름다운 답변입니다. 나는 이것이 마리우스보다 더 정답이라고 생각합니다. zend 프레임 워크 개발자가 아닌 다른 디렉토리에 대해서는 생각하지 않기 때문에 controllersMage 핵심 팀이 zend 프레임 워크 전문가라고 가정합니다. 명성. 링크 공유를위한 감사합니다
라지브 K 다카라 토미

도움이 fulll
Amit Bera

1
그러나 나는 이것이 정답이라고 생각합니다. ZF 표준을 보려고 귀찮게하지 않았습니다. 방금 논리적 설명을 찾으려고 노력했습니다. 내 방어에서 나는 그것이 내 의견이라고 대답했다.
Marius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.