작성
·
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));
}
}