2011-11-12 2 views
1

Kohana 3.2는 HMVC 디자인 패턴을 지원하도록 설계되었습니다. HMVC 패턴은 중첩 된 MVC-triad로 구성됩니다. 그러나 내가 알 수있는 한, Kohana의 계단식 파일 시스템은 모든 모델과 컨트롤러가 상위 '클래스'디렉토리에 배치되고, 뷰가 상위 'views'디렉토리에 배치되어야합니다. 모델/컨트롤러가 파일 시스템의 최상위 레벨에서 Views와 분리되면 중첩 된 MVC-triad를 구현하는 방법은 무엇입니까?Kohana의 계단식 파일 시스템을 사용하여 HMVC를 구현하는 방법

enter image description here

+0

다이어그램은 논리 상속만을 나타내고 컨트롤러 사이에서만 나타납니다. 물리적 분리가 어떻게 영향을 미칩니 까? 너 뭐 해봤 니? – arootbeer

+0

내 가정/희망은 파일 시스템에서 HMVC 패턴의 물리적 인 표현을 구현하여 논리적 인 것을 미러링 할 수 있기를 바랍니다. 그렇지 않으면 컨트롤러가 장소 전체를 가리키며 HMVC의 모듈성 이점이 사라집니다. – Yarin

답변

2

당신이 전망이 처리되는 방식을 해킹하려는 것 확실하지만, set_filename() 기능을 사용하면 원하는 디렉토리를 받아 들일 수 있도록 당신은 Kohana_View 클래스를 확장 할 수 없습니다.

컨트롤러/모델과 유사한 자동 로딩 기능을 원한다면 직접 구현할 수 있습니다. (테스트되지 않은) 예를 들어

:

public function set_filename($view) 
{   
    // Transform the class name into a path 
    $file = str_replace('_', '/', strtolower($view)); 

    if ($path = Kohana::find_file('classes', $file)) 
    { 
     // Store the file path locally 
     $this->_file = $path; 

     return $this; 
    } 

    throw new View_Exception('The requested view :view could not be found', array(
     ':view' => $view, 
    )); 
} 
+0

@ Nathan- 감사합니다. 나는 그것이 계단식 파일 시스템을 해킹 할 필요가 있다고 생각하지 않았다. 아마도 HMVC를 중심으로 구축 되었기 때문일 것이다. 그러나 이것이 아마 할 수있는 유일한 방법 인 것처럼 보인다. – Yarin

+0

View 클래스의 템플릿을 클래스 파일 전용 폴더에 두지 마십시오. 나는 이제 네가 원하는 것을 이해하고 편집이 시작될 것이라고 생각한다. – Darsstar

+0

Yarin은 조직을위한 컨트롤러/모델이있는 뷰 템플릿을 저장하고 기본 Kohana 기능 (예 :'View :: factory ($ filename) '사용)을 유지할 방법이 필요하다고 생각했습니다.물론 컨트롤러/모델과 함께 뷰 클래스를 추가하고 템플릿을 다른 곳에 두는 구조를 구현하는 것이 좋습니다. – Nathan

2

그러나 지금까지 내가 말할 수있는, Kohana의 계단식 파일 시스템이 모든 모델과 최고 '클래스'디렉토리에 배치되는 컨트롤러, 및보기에이 필요 상위 'views'디렉토리.

컨트롤러, 모델 및보기 전용 폴더가있는 Kohana 2, codeigniter 및 기타 프레임 워크와 같은 폴더 구조가 필요합니다. Kohana 3에는 클래스 전용 폴더가 있습니다. Kohana 3가 구축 된 방식으로 컨트롤러에 Controller_ 접두어가 있어야합니다. Kohana 3 오토로더는 classes/controller 폴더에 Controller_ 접두사가있는 클래스를 찾습니다.

다음 Kohana 3 또한 매우 기본적인 모델 및 뷰 클래스와 함께 제공됩니다. Kohana 3 코어는 내가 아는 한 Model 클래스를 사용하지 않으며 몇 번만 View 클래스를 사용합니다. 그러나 모델에게 Model_ 접두어를주는 관습은 Model :: factory()에서 찾을 수 있지만 강제는 아닙니다. 당신은 그들을 사용할 필요가 없습니다.

View 클래스는 뷰 폴더에서 템플릿을 찾습니다. Zombor (Zombor에서 권장하지 않음) View_Module은 Zombor (devs 중 하나)도 거기서 보게됩니다. Zombor에 의해 다시 열리는 KOstache 모듈은 Zombor에 의해 템플릿 폴더에서 해당 템플릿을 찾습니다. 두 모듈 모두 View-Model 클래스를 만들 수 있습니다.이 클래스는 View_ 접두사를 사용하여 클래스/뷰로 끝납니다. 그러나 뷰 폴더에 넣은 모든 템플릿에 대해 View를 확장하는 View_ 클래스를 만들지 못하게하고 View-Model의 경로를 하드 코딩합니다.

클래스 폴더는 클래스에만 존중해야합니다.

+0

@ Darsstar- 내가 말한 것 : Kohana 2 파일 시스템은 파일 시스템 내에서 중첩 된 MVC 트리 아드를 허용했지만, Kohana 3는 Views에서 Model-Controller 클래스를 분리하여 강제로 차단하지 못했습니다. – Yarin

+0

View 클래스를 View-Model로만 사용하도록 선택하면 로직을 템플릿으로 이동하도록 선택합니다. 각 템플릿에 대한 View-Models를 작성하고 해당 View-Models에 논리를 넣으십시오. 그런 다음 템플릿은 어디로 가야하는지에 대해 제어 할 수 있습니다. View-Models는 클래스이므로 클래스 폴더로 이동해야합니다. 그리고 당신이 분명히 그들 모두를 같은 하위 폴더에 넣고 싶다면 View_ 접두사를 그들에게 주어야합니다. 그런 다음 원하는 분리 성을 얻습니다. 그래서 당신은 코 하나가 아니라 그것을 즐겁게합니다. Kohana는 나쁜 View-Model을 즉시 제공합니다. – Darsstar

관련 문제