2010-03-30 5 views
2

MVC 구조를 사용하여 개발중인 사이트에서 작업하고 있습니다. 내 모델은 사이트의 모든 데이터를 나타내지 만 좋은 컨트롤러 구조를 결정하는 데 약간 어려움을 겪고 있습니다. 이 사이트는 사용자가 로그인/등록하고 여러 페이지의 개인 데이터를 볼 수있게하지만 공개 페이지 (예 : FAQ, 연락처 페이지 등)에 여전히 액세스 할 수 있습니다.컨트롤러를 논리적으로 구성하는 데 도움이됩니다.

이것은 내가 지금 가지고있는 것입니다 ...

주 템플릿 표시를 처리하는 템플릿 컨트롤러. 사이트의 기본 템플릿은 로그인 여부에 관계없이 동일하게 유지됩니다.

템플릿 컨트롤러를 확장하고 기본 인증을 처리하는 기본 웹 사이트 컨트롤러입니다. 사용자가 로그인하면 생성자에서 User :: control_panel() 메서드가 호출되고 인증 된 세션 전체에 존재할 제어판이 작성됩니다. 사용자가 로그인하지 않은 경우 제어판 대신 로그인 양식과 같은 다른보기가로드됩니다. 모든 보호/공용 페이지 관련 컨트롤러가 웹 사이트 컨트롤러를 확장합니다.

사용자 홈페이지에는 내가 표시하고자하는 위젯 수가 있으며, 웹 사이트 컨트롤러를 확장하는 홈 컨트롤러를 통해하고 있습니다. 이 컨트롤러는 다음과 같은 정적 호출을 통해 이러한 위젯을 생성

$this->template->content->featured_pet = Pet::featured(); 
$this->template->content->popular_names = Pet::most_popular(); 
$this->template->content->owner_map = User::generate_map(); 
$this->template->content->news = News::snippet(); 

내가 컨트롤러 (예를 들어 애완 동물 및 사용자)에 위의 정적 호출이 정적으로 유지하는 것이 확인하면 내가 대해 확실 해요 제일 먼저는 가정 - 이러한 정적을 메소드는 기본 템플릿에로드 된 뷰를 반환합니다. 이것은 내가 과거에했던 일들 이었지만 이것이 합리적인 접근인지 알아내는 것이 궁금합니다. 로그인 한 사용자의 다른 보호 페이지는 홈 컨트롤러와 유사합니다.

정적 페이지는 웹 사이트 컨트롤러를 확장하는 페이지 컨트롤러에 의해 처리되므로 사용자 제어판이나 로그인 폼이 템플릿의 왼쪽에 표시되어야하는지 여부를 알 수 있습니다. 보호 된 회원 전용 페이지는 페이지 컨트롤러로 라우팅되지 않으며이 컨트롤러는 공개적으로 사용 가능한 페이지 만 처리합니다.

내가 현재 갖고있는 한 가지 문제는 공개 및 보호 된 페이지가 웹 사이트 컨트롤러를 확장하는 경우 무한 루프를 방지하려면 어떻게해야합니까? 예를 들어 웹 사이트 컨트롤러가 인증을 처리 한 다음 요청 컨트롤러 (URL),하지만 이것은 무한 리디렉션 루프가 발생할 것입니다, 그래서 나는 이것을 처리하는 더 나은 방법을 생각해 낼 필요가있다.

이 설정은 의미가 있습니까?! 의견에 감사드립니다.

답변

1

나는 내 컨트롤러는 다음과 같이 배치가 :

/** 
* Global controller 
*/ 

class MY_Controller extends Controller { 

function __construct() { 
    parent::__construct(); 

    // Load templates, modules etc 
} 
} 


/** 
* Admin controller 
*/ 


class Admin_Controller extends MY_Controller { 

function __construct() { 
    parent::__construct(); 

    // Check admin is logged in 
} 
} 

/** 
* User controller 
*/ 

class User_Controller extends MY_Controller { 

function __construct() { 
    parent::__construct(); 

    // Check user is logged in 

} 
} 

모든 사용자 페이지 User_Controller을 확장 할 것이며, 관리자 페이지가 많은 두통없이 Admin_Controller에게 쉽게 인증을 입력 할 수 방법을 확장하고 별도의 모든 것을 유지하는 것입니다.

+0

감사합니다. 그 말이 맞습니다. 그게 정상적인 앞면과 뒷면 끝에있는 앱을 보통 레이아웃하는 방법입니다.이 경우에는 사용자와 일반 사용자가 모두 로그인하여 일부 사용자가 액세스 할 수 있다는 사실에 약간 혼란스러워졌습니다. 같은 페이지의, 그래서 나는 이것에 대처하는 Website_Controller를 사용하려고했습니다. 하지만, 아마도 여기에 두 개의 사용자 유형을 분명히 처리해야합니다. Website_controller에 어떤 교차도없이 – kenny99

+0

내 Home_Controller에서 만드는 정적 호출 유형은 다음을 통해 출력 할 내용을 생성하는 컨트롤러의 컨텍스트에서 의미가 있습니다. 보기? – kenny99

+0

흠, 이것에 대해 좀 더 생각하고 URL로 관리자와 공개 섹션을 나눌 수 없기 때문에 문제가 있습니다. 회원이 로그인했는지 여부를 확인하려면 전역 검사가 필요합니다. 예를 들어 회원이 공개 홈페이지에 액세스하여 이미 로그인 한 상태라면 수표를 포함시켜 공개 홈페이지가 공개인지 보호 된 것인지 확인해야합니다. 이것은 나를 다시 정사각형으로 데려옵니다! – kenny99

관련 문제