내 자신의 기본 MVC (또는 MVP라고도 부를 수있는 MVP) 프레임 워크를 만들고 있으며, 컨트롤러에 머리글, 바닥 글 및 기타 항목을 포함하는 모범 사례 방법을 알고 싶습니다.
현재 나는 모든 컨트롤러 의 끝에서 다음과 같이하고 있습니다 .
class Index extends Controller
{
public function index()
{
$hData = array(
'title' => 'Home',
'stylesheets' => array(
'style1.css',
'style2.css'
),
'javascripts' => array(
'script1.js',
'script2.js'
)
);
$cData = array(
'heading' => 'My first PHP application',
'message' => 'Hello, world!'
);
//HTML Output
$header = new View('/views/header.php');
$html = $header->fetch($hData);
$menu = new View('/views/menu.php');
$html .= $header->fetch();
$content = new View('/views/index.php');
$html .= $content->fetch($cData);
$footer = new View('/views/footer.php');
$html .= $footer->fetch();
echo $html;
}
}
내가 올바르게하고 있습니까, 아니면 더 나은 방법이 있습니까? 그렇다면 예를 들어 매우 감사하겠습니다.
일반적으로 MVC 프레임 워크를 직접 구축하면 일부 타협을 받아 들여야합니다. 하지만 제가 생각하는 것은 다음과 같습니다.
템플릿 엔진이 있어야합니다 (이상적으로는 대체 가능). PHP 일 수도 있고 이미 존재하는 일부일 수도 있습니다 (Twig, Smarty).
컨트롤러는 템플릿 엔진에 의해 렌더링되는 특정 뷰에 대해서만 알아야합니다. 따라서 뷰는 템플릿 파일에 대한 구체적인 경로가 아닌 이름으로 사용할 수 있어야합니다.
템플릿 엔진은 템플릿 이름을 실제 템플릿 파일로 확인하는 방법을 알고 있어야합니다.
템플릿 엔진은 컨트롤러에서 전달할 수있는 템플릿에 대한 변수를 받아 들일 수 있어야합니다.
헤더, 바닥 글 등을 포함하는 것은 템플릿 엔진이나 템플릿 내에서 고려되어야하지만 컨트롤러 내에서는 고려되지 않습니다. 예를 들어, 코드는 일부 내부 HTML을 보여주는 AJAX 호출을 지원할 수 있습니다. 이 경우 템플릿의 이름은 동일 할 수 있지만 컨트롤러에서 전달 된 일부 var에 따라 템플릿 엔진 (또는 템플릿 자체)은 일반 요청에 대해 머리글과 바닥 글을 표시하고 ajax 요청에 대해서는 생략 할 수 있습니다.
그리고 확실히, 템플릿에로드 할 css 파일을 하드 코딩 된 방식으로 정의하는 것은 컨트롤러의 작업이 아닙니다. 그러나, 수 컨트롤러에서 읽은 다음 변수로 템플릿에 전달 될 수있는 몇 가지 시스템 설정합니다.
추가 유연성이 필요하지 않거나 나중에 Smarty 또는 Twig로 전환 할 필요가 없다고 확신하는 경우 2와 3은 선택 사항 일 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다