Magento 컨트롤러 분해

컨트롤러는 MVC 패턴에서 가장 중요한 것입니다. 컨트롤러는 요청을 받고, 처리하고, 페이지를 렌더링하는 데 도움이 됩니다. 프런트 엔드 컨트롤러를 생성하고 요청을 처리하려면 Magento\Framework\App\Action\Action에서 컨트롤러 클래스를 확장해야 합니다. 이 클래스 컨텍스트는 요청 유형을 처리하고 인증된 사용자 등을 확인하는 몇 가지 추가 기능을 제공합니다. 그러나이 프로세스에서 Magento는 궁극적으로 실행 시간을 늘리는 많은 클래스를 포함해야 합니다.

이 아키텍처를 최적화하기 위해 커뮤니티 구성원은 훌륭한 솔루션, 즉 컨트롤러 분해를 제시했습니다.

Magento의 분해는 무엇입니까?





Magento 컨트롤러 분해



개발자로서 더 이상 Magento\Framework\App\Action\Action 클래스를 확장할 필요가 없으며 대신\Magento\Framework\App\ActionInterface에서 구현해야 합니다. 사용자 지정 컨트롤러의 목적(GET, POST 등 작업에 사용 여부)을 알고 있으면 사용할 수 있는 별도의 인터페이스가 있습니다.

\Magento\Framework\App\Action\HttpDeleteActionInterface
\Magento\Framework\App\Action\HttpGetActionInterface
\Magento\Framework\App\Action\HttpPostActionInterface
\Magento\Framework\App\Action\HttpPutActionInterface



예를 들어 :

<?php 
use Magento\Framework\App\Action\HttpGetActionInterface;
use Magento\Framework\View\Result\PageFactory;
class MyController implements HttpGetActionInterface
{
    /** @var PageFactory */
    protected $resultPageFactory;
    public function __construct(PageFactory $resultPageFactory)
    {
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute()
    {
        return $this->resultPageFactory->create();
    }
}


\Magento\Framework\App\Action\HttpGetActionInterface를 사용했음을 알 수 있습니다. ActionInterface를 확장한 메서드별 인터페이스입니다.

성능



이전 버전의 Magento 2(2.3까지)에서 Magento는 다음 클래스 집합을 사용하여\Magento\Framework\App\Action\Context를 작업에 주입했습니다.

\Magento\Framework\App\RequestInterface
\Magento\Framework\App\ResponseInterface
\Magento\Framework\ObjectManagerInterface
\Magento\Framework\Event\ManagerInterface
\Magento\Framework\UrlInterface
\Magento\Framework\App\Response\RedirectInterface
\Magento\Framework\App\ActionFlag
\Magento\Framework\App\ViewInterface
\Magento\Framework\Message\ManagerInterface
\Magento\Framework\Controller\Result\RedirectFactory
\Magento\Framework\Controller\ResultFactory



그리고 이러한 클래스는 더 이상 주입되지 않습니다. 성능이 크게 향상되고 메서드별 인터페이스를 구현하는 것이 훨씬 깔끔한 접근 방식입니다.

주의



일부 모듈에는 자체 AbstractAction이 있음을 명심하십시오. 예를 들어\Magento\Customer\Controller\AccountInterface는 추가로 고객 인증을 처리합니다.
컨트롤러 "Supertypes"는 더 이상 사용되지 않습니다(\Magento\Backend\App\AbstractAction,\Magento\Framework\App\Action\Action,\Magento\Framework\App\Action\AbstractAction, Magento\Framework\App\Action\Action\AbstractAccount). 더 이상 사용해서는 안 됩니다.
타사 관찰자가 컨트롤러에 가입할 수 있으므로 2.5.0까지는 코드 마이그레이션을 피하는 것이 좋습니다. getRequest, getResponse, getActionFlag와 같은 메서드는 상속으로 제거되며 이벤트에서 컨트롤러 개체를 통해 액세스할 때 오류가 발생합니다.
2.4.0 릴리스부터 새 코드에만 새로운 접근 방식을 사용하는 것이 좋습니다.
기존 Magento 컨트롤러는 이전 버전과의 호환성을 유지하기 위해 2.5.0까지 마이그레이션되지 않습니다.
아래 댓글 섹션을 통해 이 블로그에 대한 생각을 알려주거나 내 이메일 ID(예: [email protected])로 이메일을 보내주세요. 다음 시간까지 행복한 코딩 🙂

좋은 웹페이지 즐겨찾기