2009-10-08 5 views
8

나는 Kohana를 사용하고 있습니다. 그러나 나는이 질문이 좀 더 일반적이라고 생각합니다.MVC 프로젝트에서 폼 유효성 검사가 어디에서 발생해야합니까?

컨트롤러에서 양식 유효성 검사를 수행하고 있으며 지금까지 잘 작동했습니다. 하지만 최근에는 문제가 생겼습니다.

나는 의견 모델을 가지고 있으며, 몇 가지 다른 컨트롤러의 의견을 의견으로 보냅니다. 모든 컨트롤러에 유효성 검사기가있는 대신 모델에 배치했습니다.

  • 하나 개의 장소/변경

    • 내가 분명히 성공 또는 실패를 반환해야하기 때문에이 짜증 유효성 검사 규칙 (DRY)

    를 추가 할 수 있기 때문에

    은 중대하다 컨트롤러에 전달하고 Kohana의 유효성 검사 라이브러리는 배열로 오류를 반환합니다. 그래서 내 복귀는 FAIL

    내가 도움이되지만이 잘못 생각할 수 없다
    array('success' => false, $errors); 
    

    성공

    array('success' => true); 
    

것 같습니다. 그것 잘못 생각합니다.

내가 컨트롤러에서 그것을 할 경우, 단순히 (나에게) 더 나은 것 같습니다 어떤

if ($post->validate()) { 
    doWhatever(); 
} else { 
    $this->template->formErrors = $post->errors('form_errors'); 
} 

할 수 있습니다.

더 좋은 방법이 있나요? 컨트롤러 또는 메서드에서 유효성을 검사해야합니까? 내가 미쳤어?

+0

그렇다면 어떻게해야 성공 인덱스를 점검 할 것인가? (Kohona가 아닌, 일반적으로.) –

답변

4

솔직히 말해서, 귀하의 방법에 문제가있는 것은 아닙니다. 알렉스. 당신이 제대로하고있는 것처럼 보입니다. DRY 원리를 따르고 있습니다. MVC와 관련하여 제가 보통 뭔가를하고 있다면 측정 할 수있는 척도가됩니다.

0

나는 감정 이상으로 자신을 반복하지 않는 것을 선호합니다. 원하는 경우 배열의 오류를 뷰에 표시 할 수 있으므로 배열 외에도 편리합니다. 나는 kohana를 사용하지 않았지만, ASP.NET MVC에서 사용한 유효성 검사 메서드는 비슷한 목록을 제공하며 사용자에게 정확히 무엇이 잘못되었는지를 보여줄 수 있습니다.

0

항상 클라이언트 (JS)에서 유효성을 검사해야합니다. 그리고이를 무시할 수 있으므로 서버에서도 유효성을 검사 할 수 있습니다. 그리고 네 - 유효성을 재사용 가능한 형태로 바꾸는 것이 좋습니다.

+0

누가 당신의 대답을 옮기고 싶은지 트롤을하지 않는 한 - 왜 당신이주는 이유인지 설명해주십시오. 이 답변에 -1. 클라이언트에서 유효성 검사를하는 것이 훨씬 더 빠르다가 서버로 다시 돌아 오는 것을 의미합니다. 그러나 고객을 혼자만 의지하는 것은 쉽게 피할 수 있기 때문에 위험합니다. 따라서 내 대답 – Bostone

+0

나는 의견에 첫 번째로 대답에 더 많은 노력을 기울여야한다고 생각합니다. 재판관으로 판결을 내렸을 때, 나는 그 나쁜 놈을 보상 받았다. :) – pestaa

+0

고맙습니다. 내 답변이 모두 이렇게 짧지는 않습니다. 나는 단지 내 목소리를 합창에 추가하려했다. – Bostone

2

지방 모델. 소형 컨트롤러. 그게 내가 항상 해낸 방식이야. 유효성 검사는 데이터 영역에 있습니다. 데이터 계층 (적어도 나에게)은 모델이다. 나는 일반적으로 CakePHP를 MVC 프레임 워크로 사용합니다 ... 아마도 그것이 나의 유효성 검사가 모델에있는 이유 일 것입니다. 그것은 CakePHP의 방식입니다.

0

모델에서도 유효성 검사를 수행합니다. ORM, Auto_Modeler 등과 같은 대부분의 모델링 라이브러리는 검증을 지원합니다. FreeNode (irc.freenode.net)에서 #kohana 채널을 요청하면 더 빠릅니다.우리는 (보통) 물지 않습니다.

6

모든 유효성 검사 규칙이 모델 내부에 들어갈 수 있다고 생각하지 않습니다. 유효성 검사는 양식 (또는 API)에 대한 것입니다. 실제로 데이터를 확인할 때 대부분의 내용은 문맥에 의존합니다.

예를 들어, 로그인 한 사용자가이 조치를 취하고 있습니까? 검증 할 모델과 인증 계층을 결합하지 않을 것입니다. 따라서 모든 수표는 컨트롤러 내부에 있어야합니다. 모델은 상황에 구애받지 않는다. 양식은 컨트롤러에 "속하며"컨텍스트를 인식합니다.

나는 잘 구성된 데이터 당 형태 유효성 검사 규칙 플러스기본에 모델 검사를 갖는 갈 수있는 방법이라고 생각합니다. 모델의 validate() 함수에서 Auth :: instance() 또는 Session :: instance()를 호출하는 경우 잘못 처리하고있는 것입니다.

관련 문제