인프런 커뮤니티 질문&답변

최선우님의 프로필 이미지
최선우

작성한 질문수

PHP 7+ 프로그래밍: 객체지향

namespace class not found 질문

해결된 질문

작성

·

346

0

안녕하세요, 선생님!

강의는 잘 듣고있습니다.

그런데, 나만의 프레임워크 만들기 목차 중 Http강의에서 코드를 실행하던 중 namespace 내에 class가 발견되지 않는다는 오류를 발견했습니다. 코드는 일단, 모두 똑같은데 어디에서 문제가 발생한 것인지 원인을 잘 모르겠네요..ㅠㅠ

  • composer.json

{
    "name": "pronist/eclair",
    "description": "eclair is a simple PHP micro framework.",
    "type": "library",
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "Pronist\\Eclair\\": "src/"
        }
    },
    "authors": [
        {
            "name": "sunwoo"
        }
    ],
    "require": {}
}

 

 

  • Request.php

<?php

namespace Eclair\Http;

class Request
{
    public static function getMethod()
    {
        return filter_input($_POST, '__method') ?: $_SERVER['REQUEST_METHOD'];
    }

    public static function getPath()
    {
        return $_SERVER['PATH_INFO'] ?? '/';
    }

}

 

-index.php

<?php

require './vendor/autoload.php';

use Eclair\Http\Request;

$_SERVER['REQUEST_METHOD'] = 'GET';


var_dump(Request::getMethod());

 

디렉토리 구조는

ECLAIR(폴더)

/src

/Database

-adaptor.php

/Http

-Request.php

/vendor

-composer.json

-index.php

디렉토리 구조 또한 강의 중 그것과 동일합니다.

 

 

 

답변 1

1

정상우님의 프로필 이미지
정상우
지식공유자

안녕하세요 :)

올려주신 composer.json 을 살펴보면, psr-4 매핑이 "Pronist\\Eclair\\": "src/" 로 되어있는데,
코드에는 namespace Eclair\Http 와 같이 사용하고 있군요. 즉, 매핑이 잘못되었습니다. composer.json 에 Pronist\\ 를 붙인 이유는 단순하게 벤더 이름을 표기하기 위함입니다. namespace Eclair 와 같이 접근하기 위해서는 "Eclair\\": "src/" 와 같이 해보시기 바랍니다.

최선우님의 프로필 이미지
최선우
질문자

선생님이 알려주신 방법으로 해결완료했습니다! 그런데, 다만 저장을 했는데도 불구하고 동일한 에러가 출력되어 자료를 조금 더 찾아보니, composer를 변경한 이후에는 composer update 명령어를 입력해주어야함을 새로 배우게 됐습니다!

다음에도 궁금한 것이 있으면, 한 번 더 찾아뵙겠습니다!감사합니당 ~ :)

최선우님의 프로필 이미지
최선우

작성한 질문수

질문하기