Magento2 CLI 모듈 : 활성화하면 "알 수없는 모듈"오류가 발생합니다


23

Magento2에서 간단한 사용자 정의 모듈을 만들고 CLI로 활성화하려고합니다.

bin/magento module:enable Vendorname_Modulename

그러나 다음과 같은 오류가 발생합니다.

알 수없는 모듈 : 'Vendorname_Modulename'

모듈과 파일이 존재합니다. app/code/Vendorname/Modulename/

물론 캐시를 지우거나 비활성화하고 생성을 지우고 Memcache (d)가 실행되지 않습니다 ...

답변:


27

registration.php 밀집

분명히 내 Vendorname_Modulename모듈 에이 없습니다 registration.php. GitHub에서 최신 Magento2 버전을 실행하고 있습니다.

모든 모듈은에 자체 등록해야합니다 ComponentRegistrar. registration.php모듈의 루트에있는 모듈 의 일반적인 내용 은 다음을 포함 할 수 있습니다.

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

app/code/Magento/또는 귀하의 vendor/magento/디렉토리 에있는 Magento 핵심 구성 요소를 참조하십시오


registration.php 놓치지 마세요

이 외에도 registration.php모듈에 파일이 있지만이 오류가 계속 발생하면 이는 registration.php로드되지 않았고 Magento2가 모듈에 대해 알지 못했음을 의미합니다 .

모듈은 app/code/(Magento2가 폴더에서 폴더를 검색 app/code/하고 모듈을 찾습니다) 아래에 있어야 registration.php하지만 모듈을 Composer 패키지로 빌드 한 경우 Composer의 vendor/디렉토리에 있으며 Composer가 모듈 registration.php(Magento) 을로드 하도록 속 여야 합니다 vendor/자체적으로 검색하지 않습니다 ).

composer.json에서 Magento2 모듈을 확인 하면 파일 을 참조 vendor/magento/module-*하는 "autoload"섹션 이 표시 registration.php됩니다. 따라서 Composer는 모듈을 자동로드하여 모듈이 registration.php있는 곳에서 Magento2를 "알려줍니다" .

Magento Checkout 모듈의 조각입니다 composer.json.

"autoload": {
    "files": [
        "registration.php"
    ],
    "psr-4": {
        "Magento\\Checkout\\": ""
    }
}

모듈을 별도의 저장소에 있고 composer를 통해로드 한 경우 위의 방법이 있습니다. 별도의 리포지토리에없는 경우 모듈이에 vendor/있지만에 속하지 않습니다 app/code/.


2
실수로 app / code / Vendorname / Modulename / etc 폴더에 registration.php 파일을 실수로 배치했을 때 같은 오류가 발생했습니다
— Mukesh

2
좋은 프레젠테이션 .. 잘 설명
— devst3r

6
<?php
use Magento\Framework\Component\ComponentRegistrar;
$name = implode('_', array_map(
    function($part) {
        return implode(array_map('ucfirst', explode('-', $part)));
    },
    array_slice(explode(DIRECTORY_SEPARATOR, __DIR__), -2, 2)
));
ComponentRegistrar::register(ComponentRegistrar::MODULE, $name, __DIR__);

아무것도 변경하지 않고도 모든 확장에 사용할 수 있습니다.
모든 확장 위치 ( app/code또는 vendor) 및 모든 확장 유형 (모듈, 번역 사전)에 적용됩니다.


와우, 이것은이 파일의 존재가 모든 모듈에서 동일 할 수 있기 때문에 전혀 쓸모가 없게 만듭니다. 중복 코드의 경우는 어떻습니까? @Dimitry, 당신은 Magento2의 개발팀을 이겼습니다 : P
— 7ochem

테마에는 적용되지 않습니다.
— Maddy

5

추가 : If registration.php 누락되지 않은

모듈의 모듈 이름 etc/module.xml 이 올바른지 확인하고 확인 하십시오 (있는 <sequence>경우 태그 의 모듈 이름 이 아님).

여기에 이미지 설명을 입력하십시오


2
좋은 추가! 또한 좋은 당신은 일에 관한 정확한 필드 보여주는 스크린 샷을 설명했다고
— 7ochem

0

모듈 디렉토리 및 파일에 대한 권한이 올바르게 설정되지 않은 경우에도 발생할 수 있습니다. magento 및 웹 사용자가 디렉토리 및 파일을 읽을 수 있는지 확인하십시오.


Magento는 모듈 코드에 대한 쓰기 권한이 필요하지 않습니다
— 7ochem

나는, 덕분에 오늘이 오류를했고 755에 모듈 폴더에 대한 권한을 복원하면이 오류 dissapearing했다
— 에르베 Tribouilloy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.