Magento2-사용자 정의 컨트롤러 오류 발생


12

게시물에 표시된 모듈을 만들었 습니다. 그러나 내 컨트롤러가 작동하지 않습니다. 이 오류 메시지가 나타납니다.

복구 가능한 오류 : MP \ MyModule \ Controller \ Index \ CheckUserName :: __ construct ()에 전달 된 인수 1은 Magento \ Framework \ App \ Action \ Context의 인스턴스 여야하고 D에서 호출 된 Magento \ Framework \ ObjectManager \ ObjectManager의 인스턴스 여야합니다. : \ xampp \ htdocs \ magento2 \ vendor \ magento \ framework \ ObjectManager \ Factory \ AbstractFactory.php 97 행에 D : \ xampp \ htdocs \ magento2 \ app \ code \ mp \ MyModule \ Controller \ Index \ CheckUserName에 정의되어 있습니다. 35 행의 PHP

내 컨트롤러 코드는 다음과 같습니다.

<?php
namespace MP\MyModule\Controller\Index;

class CheckUserName extends \Magento\Framework\App\Action\Action
{
    protected $_logger;
    protected $_objectManager;
    protected $_request;

/*
            \Psr\Log\LoggerInterface $logger, //log injection
            \Magento\Framework\App\Request\Http $request

        $this->_logger = $logger;

        $this->_logger->debug('CheckUserName_Constructor_Begin');

        $this->_request = $request;

        $this->_logger->debug('CheckUserName_Constructor_End');     


        */  

        /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory resultPageFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory
    )
    {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute()
    {
        echo "Hello from Checkusername";
    }    
}
 ?>

var / generation 폴더를 삭제 한 후 발생하는 오류 메시지는 다음과 같습니다.

Warning: ltrim() expects parameter 1 to be string, object given in D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator\EntityAbstract.php on line 152

Notice: Uninitialized string offset: 0 in D:\xampp\htdocs\magento2\vendor\magento\framework\Autoload\ClassLoaderWrapper.php on line 81

Notice: Uninitialized string offset: 0 in D:\xampp\htdocs\magento2\vendor\composer\ClassLoader.php on line 317

Notice: Uninitialized string offset: 0 in D:\xampp\htdocs\magento2\vendor\composer\ClassLoader.php on line 349 exception 'Magento\Framework\Exception\LocalizedException' with message 'Source class "" for "Magento\Framework\App\Response\Http\Interceptor" generation does not exist.' in D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator.php:171 Stack trace: #0 D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator.php(100): Magento\Framework\Code\Generator->tryToLoadSourceClass('Magento\\Framewo...', Object(Magento\Framework\Interception\Code\Generator\Interceptor))
#1 D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator\Autoloader.php(35): Magento\Framework\Code\Generator->generateClass('Magento\\Framewo...')
#2 [internal function]: Magento\Framework\Code\Generator\Autoloader->load('Magento\\Framewo...')
#3 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\AbstractFactory.php(105): spl_autoload_call('Magento\\Framewo...')
#4 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\Compiled.php(88): Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject('Magento\\Framewo...', Array)
#5 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\Compiled.php(130): Magento\Framework\ObjectManager\Factory\Compiled->create('Magento\\Framewo...')
#6 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\Compiled.php(67): Magento\Framework\ObjectManager\Factory\Compiled->get('Magento\\Framewo...')
#7 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\ObjectManager.php(57): Magento\Framework\ObjectManager\Factory\Compiled->create('Magento\\Framewo...', Array)
#8 D:\xampp\htdocs\magento2\vendor\magento\framework\App\Bootstrap.php(233): Magento\Framework\ObjectManager\ObjectManager->create('Magento\\Framewo...', Array)
#9 D:\xampp\htdocs\magento2\index.php(38): Magento\Framework\App\Bootstrap->createApplication('Magento\\Framewo...')
#10 {main}

1
@Claas MP는 __construct 함수를 설명하고 다시 확인하십시오. 또한 magento var dir에서 생성 폴더를 삭제하십시오
Shaheer Ali

불행히도 Shaheer는 문제를 해결하지 못합니다.
ClassMP

생성 폴더를 삭제 했습니까?
Shaheer Ali

아니요. / var / generation 폴더를 의미합니까? 생성 폴더의 내용은 어떻게 생성됩니까? "magento setup : di : compile"로 다시 컴파일해야합니까?
ClassMP

그래 그 말이야 M2는 런타임시 팩토리 파일을 미리 생성합니다. 다시 컴파일 할 필요가 없습니다
Shaheer Ali

답변:


18

새로운 CentOS 개발 환경에 모듈을 배포 한 후 var / di 및 var / generation 폴더를 제거하고 di를 다시 컴파일하면 작동합니다. 그 전에 Win Xampp 환경을 사용했습니다. 많은 문제가 발생합니다 ...


2
이것이 작동하는지 확인할 수 있습니다. 새로운 경로를 추가 할 때마다해야하는 고통입니다
Alex

1
이것이 실제로 CentOS 전용 문제입니까?
Mir

2
@ 미르 이것은 OS 문제가 아닙니다. @Alex는 의존성 주입을 약간 변경할 때 마다이 php bin/magento setup:di:compile명령 을 실행 하면 모든 것을 수행합니다.
Nahid

7

나는 같은 문제에 부딪쳤다. 몇 시간의 무의미한 디버깅과 벽에서 내 머리를 두드리는 동안 나에게 잘 맞는 솔루션을 생각해 냈습니다.

결국 나는 모든 액션 파일 이름과 클래스 이름을 camel-case에서 변경했습니다.

에서:

D : \ xampp \ htdocs \ magento2 \ app \ code \ mp \ MyModule \ Controller \ Index \ CheckUserName.php

<?php
namespace MP\MyModule\Controller\Index;

class CheckUserName extends \Magento\Framework\App\Action\Action {
...
}

에:

D : \ xampp \ htdocs \ magento2 \ app \ code \ mp \ MyModule \ Controller \ Index \ Checkusername.php

class Checkusername extends \Magento\Framework\App\Action\Action {
...
}

최신 버전의 Magento2와 관련이 있습니까? 문제없이 로컬 환경에서 실행하고 있지만 컴파일러를 실행할 때 문제가 발생합니다.
awavi

서버 환경과 관련이 있습니다. 내 경험에 따르면, Windows (또는 최근 Mac)에서 모듈을 개발할 때 낙타 사례 파일 이름 및 클래스 이름에 문제가 없지만 대부분의 Linux 배포판에서 이러한 문제가 발생하므로 더 쉽게 찾을 수 있습니다. 앞서 언급 한대로 파일과 클래스의 이름을 지정하십시오.
잔 코레

문제가 Windows에 약하게 입력되어 있음을 확신합니다. 즉, 'CheckUserName.php'는 Windows의 'Checkusername.php'와 동일하게 취급됩니다. 그러나 Linux는 'CheckUserName.php'와 'Checkusername.php'가 완전히 다른 것을 의미하는 강력한 형식입니다. Windows에서 개발하고 CentOS에서 테스트하기 때문에 때때로 같은 문제가 발생합니다.
Mike Levy

7

Magento 루트 디렉토리에서 다음 명령을 실행하십시오.

php bin/magento setup:di:compile

그러면 DI (Dependency Injection)가 다시 컴파일되고 문제가 해결됩니다.


나는 그 명령을 성공적으로 실행했으며 관리자와 프론트 엔드 모두 장바구니에 게시 오류가 발생했습니다. "스트림을 열지 못했습니다 : / var / www / html / mangento2 / vendor / colinmollenhour / cache-backend에서 권한이 거부되었습니다. . - 파일 / File.php은 관리자와 프론트 엔드에서 같은 오류가 있었다.
VectorVortec

그런 다음 명령을 다시 실행하고 장바구니의 두 부분이 모두 정상적인 동작으로 돌아 왔습니다.
VectorVortec

0

컨트롤러 CheckUserName.php파일은 아래와 같습니다

MP / MyModule / Controller / Index / CheckUserName.php

<?php
namespace MP\MyModule\Controller\Index;

class CheckUserName extends \Magento\Framework\App\Action\Action
{

    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory resultPageFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory
    )
    {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute()
    {
        echo "Hello from Check username";
    }

}

캐시를 지우십시오.

그 후 아래 URL 을 사용하여 컨트롤러에 액세스 할 수 있습니다

http://192.168.0.52/m2ee/my_module/index/CheckUserName/ 또는 http://192.168.0.52/m2ee/index.php/my_module/index/CheckUserName/

참고 : my_module은 내 모듈 이름이며 여기에서 이름을 바꿀 수 있습니다.

아래 그림 참조 My side it working

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

작동하지 않는 경우 알려주십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.