우선 모든 요청을 단일 PHP 파일로 리디렉션해야합니다. Apache의 .htaccess에있는 부분이거나 다른 서버의 해당 부분입니다.
그런 다음 $_SERVER
에서 볼 수있는 데이터를 탐색해야합니다. $_SERVER['PATH_INFO']
을 사용하는 것이 일반적이지만 선택 사항은 요청을 정확히 다시 작성하는 방법에 따라 다릅니다.
그런 다음 정규 표현식 목록이있는 라우터를 만들어야하며 획득 한 URL 조각과 일치하도록 시도해야합니다. 그것은 일반적인 관행의 상점이 정규 표현식은 훨씬 간단 표기법에서 생성 한한다
'#^/(?P<page>[^/\\\\.,;?\n]+)$#'
'#^/user/(?P<id>[0-9]+)/(?P<nickname>[^/\.,;?\n]+)$#'
'#^(?:/test/(?P<parameter>[^/\\\\.,;?\n]+))?/mandatory$#'
: 여기
당신에게 몇 가지 아이디어를 줄 수있는 몇 가지 예입니다 , 첫 번째 반복에서는 너무 많이 집중해서는 안됩니다.
또한 선택적 조각이있는 표현식을 사용하는 경우 "대체"값을 제공해야합니다. 조각이 제공되지 않지만 패턴이 일치하는 경우이 값은 기본값으로 사용됩니다.
는
내가 모든 것을 할 방법은 PHP에서 다음과 같습니다이 후
/*
* Routing mechanism
*/
$uri = isset($_SERVER[ 'PATH_INFO' ])
? $_SERVER[ 'PATH_INFO' ]
: '/';
$builder = new RequestBuilder;
$request = $builder->create();
$request->setUri($uri);
$router = new Router(new RouteBuilder);
$router->import(
$reader->getAsArray(__DIR__ . '/config/routes.json')
);
$router->route($request);
가 $request
변수가 다음 $id = $request->getParameter('id')
또는 $controller = $request->getParameter('controller')
같은 특정 매개 변수를 사용하여 명령을 쿼리 수있는 개체를 포함합니다.
패턴 자체를 엉망으로 만들지 않으면 추출한 값이 권한없는 파일 포함에 대해 안전합니다.
당신은 당신이 원하는 것을 정확하게 수행해야하는'Front Controller'를 찾고 있습니다. – Yang