2013-08-24 2 views
1

PHP로 작성된 웹 응용 프로그램에 대해 안전한 단일 엔트리 포인트 아키텍처를 설정하는 방법에 대한 자습서를 찾았지만 좋은 결과를 찾을 수 없었습니다. 누가 알겠습니까? 어쩌면 내 검색어가 좋지 않았을 수도 있습니다 ... Laravel의 코드를 보는 것이 좋은 생각 인 것 같지만, 머리를 돌리는 좋은 방법입니다. 저를 이해하기에는 너무 많은 일이 있습니다.Laravel 's와 비슷한 단일 진입 점 아키텍처를 설정하는 방법은 무엇입니까?

그렇다면 앱에 적용하기 쉽고 동시에 (예 : 로컬 파일 포함에 대해 보호하는) 아키텍처와 같은 아키텍처를 만드는 데 어떻게해야할까요?

+0

당신은 당신이 원하는 것을 정확하게 수행해야하는'Front Controller'를 찾고 있습니다. – Yang

답변

5

우선 모든 요청을 단일 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') 같은 특정 매개 변수를 사용하여 명령을 쿼리 수있는 개체를 포함합니다.

패턴 자체를 엉망으로 만들지 않으면 추출한 값이 권한없는 파일 포함에 대해 안전합니다.