2013-02-03 4 views
0

나는 코드를 반복하지 않기 위해 서브 클래스 기능을 활용하고 싶습니다. HTML::FormHandler을 사용하고 있습니다. myapp::Form::Account::Base에서HTML :: FormHandler 하위 클래스 필드

myapp::Form::Account::Base 
myapp::Form::Account::Register 

myapp::Form::Account::Register 상속 : 현재 나는 두 가지 형태가있다.

has_field 'email' => (
    label   => 'Email', 
    type    => 'Text', 
    apply   => [ Email ], 
    element_class => [qw/email/], 
    required   => 1, 
    unique   => 1, 
    element_attr => {autocomplete=>"off"}, #for register page 
); 

myapp::Form::Account::Register, 나는이 동일한 정의 이메일 필드가하고 싶습니다,하지만 난 그것에 클래스 "uniqueemail"를 추가하고 싶습니다 : myapp::Form::Account::Base는 다음과 같이 정의 된 이메일 필드를 가지고 있습니다. 그러나, 나는이 작업을 수행 할 때마다 :

has_field 'email' => (
    element_class => [qw/uniqueemail/], 
); 

myapp::Form::Account::Register에, 그냥 완전히 이메일 필드의 부모 폼의 정의를 덮어 쓰고 새로운 것을 만든다. 어쨌든 부모의 양식 필드를 하위 클래스로 만들거나 추가 할 수 있습니까? 아니면 원하는 변경 사항을 얻으려면 이메일 필드를 다시 재정의해야합니까? 감사!

답변

2

당신이 할 수있는 그런 myapp와의 :: 양식 :: 계정 :: 자료 이메일 필드는 다음과 같을 것 필드 이름 앞에 '+'를 사용하여 상위 정의를 재정의하는 필드 정의를 제공하십시오.

has_field '+email' => (
    element_class => [qw/uniqueemail/], 
); 
+0

그리고 이것은 (요소 클래스 이외의) 전자 메일 정의의 다른 모든 부분을 동일하게 남겨 둡니까? – srchulo

+0

예. 설정을 결합하는 해시가 다소 복잡하게 병합됩니다. – gshank

1

사용자 정의 필드 유형을 만들 수 있습니다.

은 다음과 이메일 유형을 : HTML :: FormHandler :: 필드 : 텍스트 나 HTML :: FormHandler :: 필드 : 이메일의 정의를 봐 원하는 기본값.

has_field 'email' => (
    type    => '+myapp::Form::Account::CustomEmail' 
); 

다음의 MyApp에 :: 양식 :: 계정 :: 회원 등록 :

has_field 'email' => (
    type    => '+myapp::Form::Account::CustomEmail', 
    element_class => [qw/uniqueemail/], 
); 
+0

감사합니다! 그건 좋은 제안입니다 :) – srchulo