Magento 2에서 사용자 지정 모듈을 만드는 방법

게시 됨: 2018-03-19

마젠토 모듈이란?

아시다시피 모듈은 특정 비즈니스 기능과 관련된 블록 , 컨트롤러 , 모델 , 도우미 등을 포함하는 디렉토리입니다.

최적의 모듈화에 대한 Magento의 약속에 따라 모듈은 한 기능을 캡슐화하고 다른 모듈에 대한 종속성을 최소화합니다.

모듈은 지원 논리와 함께 비즈니스 기능을 제공하는 반면 테마는 사용자 경험과 매장 외관에 큰 영향을 미칩니다.

모듈 목적

각 모듈의 목적은 새로운 기능을 구현하거나 다른 모듈의 기능을 확장하여 특정 제품 기능을 제공하는 것입니다. 각 모듈은 독립적으로 작동하도록 설계되었으므로 특정 모듈을 포함하거나 제외해도 일반적으로 다른 모듈의 기능에는 영향을 미치지 않습니다.

Magento 2에서 모듈은 다음 형식으로 Magento 설치의 app/code 디렉토리에 있습니다: app/code/<Vendor>/<ModuleName>. 이제 다음 단계에 따라 Magento 2에서 작동하는 간단한 모듈을 만들 것입니다.

Magento 2 모듈 만들기

  1. 모듈 폴더를 만듭니다.
  2. etc/module.xml 파일을 만듭니다.
  3. registration.php 파일을 만듭니다.
  4. bin/magento setup:upgrade 스크립트를 실행하여 새 모듈을 설치합니다.
  5. 모듈이 작동하는지 확인하십시오.

이러한 각 단계를 자세히 살펴보겠습니다.

1단계: 모듈 폴더 생성

  • Magento 2에서 모듈을 위한 두 가지 가능한 위치가 있습니다: 앱/코드 폴더 및 공급업체 폴더

Magento 2가 설치된 방법에 따라 핵심 모듈은 vendor/magento/magento-*folders(컴포저 설치용) 또는 app/code/Magento/ 폴더(github 복제용)에 위치할 수 있습니다.

  • 다음 중 새 모듈에 대해 선택해야 하는 위치는 무엇입니까?

특정 프로젝트에 대한 모듈을 빌드하는 경우 앱/코드 폴더를 선택하고 프로젝트의 저장소에 커밋하는 것이 가장 좋습니다.

재사용할 확장을 빌드하는 경우 작성기를 사용하여 만들고 모듈을 vendor/<YOUR_VENDOR>/module-something 폴더에 넣는 것이 좋습니다.

Magento 2의 각 모듈 이름은 공급업체와 모듈 자체의 두 부분으로 구성되므로 공급업체와 모듈 이름을 정의해야 합니다. 이 예에서는 공급업체 이름을 "Learning"으로 지정하고 모듈 이름을 "FirstUnit"으로 지정하겠습니다.

app/code/Learning 폴더를 만들고 이 폴더 안에 FirstUnit이라는 또 다른 폴더를 배치해 보겠습니다. 명령줄을 사용하는 경우 코드는 다음과 같습니다.

  1. 루트 폴더로 cd
  2. mkdir 앱/코드/학습
  3. mkdirapp/code/Learning/FirstUnit

설치에 파일과 폴더를 만들 수 있는 권한이 있는지 확인하십시오.

2단계: etc/module.xml 파일 생성

이 파일은 모듈이 존재하는 데 필요하며 다음 정보를 포함합니다.

  • 모듈 이름
  • 모듈 버전
  • 종속성

Magento 2에서 클래스 이름은 폴더 구조를 따라야 하기 때문에 모듈 이름은 방금 만든 폴더로 정의됩니다. Learning/FirstUnit 폴더를 만들었기 때문에 모듈 이름은 Learning_FirstUnit이고 이 모듈에 속한 모든 클래스는 Learning\FirstUnit으로 시작합니다(예: Learning\FirstUnit\Observer\Test).

모듈 버전은 데이터베이스 스키마 및 데이터의 현재 버전을 나타내며 업그레이드에 사용됩니다. 예를 들어 모듈에서 테이블의 스키마를 수정하기로 결정했다고 가정합니다. 코드가 배포된 모든 인스턴스에서 이러한 변경이 일어날 것이라고 어떻게 확신할 수 있습니까? 직접 SQL 쿼리로 데이터베이스를 변경하면 작동하지 않습니다. 대신 Magento 2에는 모든 모듈에 설치 및 업그레이드 스크립트가 있습니다(선택 사항). 이러한 스크립트에는 데이터베이스 스키마 또는 데이터를 수정하는 명령이 포함되어 있습니다. 스크립트 실행 여부를 추적하기 위해 Magento 2는 모듈 버전을 사용합니다. 새 데이터베이스 변경을 구현할 때마다 새 버전의 모듈을 구현하고 해당 module.xml을 변경합니다. Magento는 현재 모듈의 버전을 데이터베이스에 저장하고, 데이터베이스 값과 module.xml의 값이 일치하지 않으면 업그레이드 코드를 실행합니다.

종속성. 한 모듈이 다른 모듈에 종속된 경우 module.xml 파일에는 현재 모듈이 종속된 모듈 목록을 정의하는 특수 선언이 있습니다. 이 예에서는 Magento_Catalog에 종속된 모듈을 만들 것입니다.

다음 명령줄 코드를 사용하여 app/code/Learning/FirstUnit/etc 폴더를 만듭니다.

 mkdir 앱/코드/학습/FirstUnit/기타

그런 다음 다음 내용으로 XML 파일을 만듭니다.

 <?xml 버전="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Learning_FirstUnit" setup_version="0.0.1">
        <순서>
            <모듈 이름="Magento_Catalog" />
        </순서>
    </모듈>
</구성>

XML 파일에서 다음을 지정했습니다.

  • 모듈 이름: Learning_FirstUnit(우리가 만든 폴더 기반)
  • 버전: 0.0.1(우리 모듈의 초기 버전)
  • 종속성: Magento_Catalog. 우리는 여러 종속성을 가질 수 있습니다. 이 경우 시퀀스 노드 아래에 <module name=”..” /> 노드를 넣습니다.

3단계: registration.php 파일 생성

각 모듈에는 Magento에 모듈을 찾는 방법을 알려주는 이 파일이 있어야 합니다. 예제를 계속 진행하면서 app/code/Learning/FirstUnit/registration.php 파일을 만듭니다. 그런 다음 다음 내용을 넣으십시오.

 <?php \Magento\Framework\Component\ComponentRegistrar::register(\Magento\Framework\Component\ComponentRegistrar::MODULE, 'Learning_FirstUnit', __DIR__);

registration.php 는 모든 모듈에 대해 동일한 패턴을 따르는 표준화된 파일입니다.

달라지는 유일한 것은 모듈 이름이며, 우리의 경우 Learning_FirstUnit 입니다.

4단계: "setup:upgrade" 명령 실행

이 명령을 실행하면 새 모듈이 활성화되어 Magento에 존재를 알립니다.

 php bin/magento 설정:업그레이드

많은 양의 출력을 표시해야 하며 그 중 한 줄은 Learning_FirstUnit 이어야 합니다. 이 코드 줄이 있는지 확인하십시오.

5단계: 새 모듈이 활성 상태인지 확인

지금까지 모듈에 유용한 코드를 추가하지 않았습니다. 여전히 비어 있으므로 보이지 않습니다. 인식되었는지 확인하려면 app/etc/config.php 파일을 확인하십시오. 활성 상태인 자동 생성 모듈 목록이 있습니다.

이 목록을 수동으로 변경하지 마십시오!

 고양이 앱/etc/env.php | grep Learning_FirstUnit

이 단계를 사용하면 Magento 2에서 새 모듈을 성공적으로 생성할 수 있습니다.


더 읽어보기:
Magento 2에서 정적 콘텐츠를 배포하는 방법