2017-03-15 5 views
1

전화 및 전자 메일 필드에 대한 사용자 지정 유효성 검사를 통해 서버 쪽 유효성 검사를 수행하려고합니다. 양식 작업에서 사용자 지정 유효성 검사를 수행하고 있습니다.Silverstripe - 유효성 검사 후 양식 데이터 반환

첫 번째는 올바른 위치이며 두 번째는 유효성 검사를 통과하지 못하면 어떻게 데이터를 양식으로 되돌릴 수 있습니까?

현재 양식 전체가 삭제됩니다.

public function doSubmitForm($data, Form $form) { 

     if (!preg_match("/^[\+_a-z0-9-'&=]+(\.[\+_a-z0-9-']+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i",$data['Email'])) { 
      $form->addErrorMessage('Email', 'Invalid email', 'bad'); 
     return $this->redirectBack(); 
     } 
     if (!preg_match("/^((?:\+)|0)(\d{9,14})$/i",$data['Phone'])) { 
      $form->addErrorMessage('Phone', 'Please match the correct format eg: 0821234567', 'bad'); 
     return $this->redirectBack(); 
     } 

     $form->sessionMessage('Thank you for your submission','alert alert-success'); 

    return $this->redirectBack(); 
    } 

답변

2

이렇게 서버 측 유효성 검사를 수행하지 않는 것이 좋습니다. 가장 쉬운 방법은 적절한 양식 필드를 사용하는 것입니다. 예 : EmailFieldPhoneNumberField.

이러한 방법으로 원하는 방식으로 유효성을 검사하지 않으면 해당 항목을 확장하거나 자신 만의 FormField 하위 클래스를 만들면됩니다.

https://github.com/silverstripe/silverstripe-framework/blob/3.5/forms/EmailField.php#L39이 또는 당신은 또한 Validator 또는 RequiredFields를 확장하여 사용자 정의 유효성 검사기를 구현할 수 :

는 여기가 검증의 EmailField가하는 방법입니다. 유효성 검사기는 전체 양식에 적용될 것입니다. 개별 필드 유형의 유효성 검사를 시작하면 사용자 정의 클래스로 필드를 구현하는 것이 좋습니다 (재사용 가능한 구성 요소가있는 방식으로).

+0

감사합니다. 나는 전자 우편 검증이 좋다는 것을 본다. 전화 번호는 적어도 10 자 이상이어야합니다. 나는'Validator' 확장에 대해 읽었지만 정확히 따라 가지 않았습니다. '$ required = new RequiredFields (배열 ('Name', 'Email', 'Phone')); $ form = new Form ($ this, 'MyForm', $ fields, $ actions); \t \t \t $ form-> setValidator ($ required); ' 그래서 사용자 정의 전화 클래스를 만들고 유효성 검사를 수행해야합니까? – Craig

+0

'TextField', 아마도'PhoneField'의 커스텀 서브 클래스를 생성하고 거기서'validate' 메소드를 구현할 것을 제안합니다 (phone-number validation으로). 'EmailField'의 코드를 시작점으로 취할 수 있습니다 ... – bummzack

+0

전화 번호 확인을위한 https://github.com/giggsey/libphonenumber-for-php는 좋은 도구 일 수 있습니다. – wmk

1

요 전날 전화 번호로 10 자 길이를 구현해야했습니다.

https://github.com/sheadawson/silverstripe-zenvalidator

는 I 작곡가 통해 상기 모듈을 포함하고, 추가 정보에 설정 하였다. 난 그냥 $ 유효성 검사기를 만든 다음 양식

$validator = ZenValidator::create(); 
$validator->setConstraint('Phone', Constraint_length::create('range', 10, 10)->setMessage('Phone numbers must be 10 digits in length')); 
$validator->disableParsley(); 

$Form = new Form($this, 'FormName', $fields, $actions, $validator); 

에 추가 프런트 엔드를 들어 getCMSValidator() 메소드

public function getCMSValidator() { 
    $validator = ZenValidator::create(); 
    $validator->setConstraint('Phone', Constraint_length::create('range', 10, 10)->setMessage('Phone numbers must be 10 digits in length')); 
    $validator->setConstraint('PhoneAH', Constraint_length::create('range', 10, 10)->setMessage('Phone numbers must be 10 digits in length')); 
    $validator->setConstraint('PhoneMobile', Constraint_length::create('range', 10, 10)->setMessage('Mobile numbers must be 10 digits in length')); 
    $validator->disableParsley(); 
    return $validator; 
} 

을 만든 관리자 인터페이스에 대한

나에게 약 20 분이 걸렸다 최소 5 개 또는 6 개의 다른 형식으로 최소 10 &을 구현해야합니다.

이 정보가 도움이되기를 바랍니다.

건배, 콜린