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

언젠가는프리님의 프로필 이미지

작성한 질문수

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

26 - 라우팅 (Routing; Route, Middleware, RequestContext)

http://localhost:8080/posts/1 접근시 배열 0값 표기 오류

작성

·

234

·

수정됨

0

    Route::add('get','/posts/{id}', function($id){
    echo ($id);
    var_dump(Adaptor::getAll('select * from posts where `id`= ?', [ $id ] ));
});

route.php

    public static function add($method, $path, $handler, $middlewares = [])
    {
        self::$contexts[] = new RequestContext($method, $path, $handler, $middlewares);
    }

위처럼 불러와도

배열 표기가 아무것도 안나오는데 어떤부분을 확인해야 강의처럼 내용확인이 가능할까요?

{id}array(0) { } 이렇게만 표기 됩니다.

$id값을 못 읽는것 같은데 어떻게 해결해야 할지 모르겠네요

답변 1

0

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

안녕하세요.

$id 값을 못 읽어오는 경우, 라우트 주소를 파싱할 때 문제가 발생했을 수도 있습니다. 이럴 때는 RequestContext::match() 를 살펴보는 것이 좋습니다. 강의에 쓰인 원본 소스코드는 다음과 같습니다. 로직이 잘못 처리된 곳이 있는지 점검 후 다시 시도해보시기 바랍니다.

아래의 소스코드는 URL 을 / 로 분리한 뒤, 정규식을 사용해서 파라매터가 요구되는 패턴인지 파악하고 사용자가 요청한 주소와 매핑시켜 처리하고 있습니다.

 public function match($url)
    {
        $urlParts = explode('/', $url);
        $urlPatternParts = explode('/', $this->path);

        if (count($urlParts) === count($urlPatternParts)) {
            $urlParams = [];

            foreach ($urlPatternParts as $key => $part) {
                if (preg_match('/^\{.*\}$/', $part)) {
                    $urlParams[$key] = $part;
                } else {
                    if ($urlParts[$key] !== $part) {
                        return null;
                    }
                }
            }
            return count($urlParams) < 1 ? [] : array_map(fn ($k) => $urlParts[$k], array_keys($urlParams));
        }
    }