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.