2016-08-16 3 views
0

사용자가 프론트 엔드를 통해 가입 할 수있는 확장 프로그램을 만들었습니다. 고객이 특별한 작업을 요청했기 때문에 나는 일하는 것을 사용할 수 없었습니다.TYPO3 : 양식 제출 후 양식 유지

촬영 된 사용자 이름을 감지하는 코드입니다.

public function createAction(\Vendor\Feregister\Domain\Model\FeUserX $newFeUserX) 
{ 
    $uname = $newFeUserX->getUsername(); 
    $select_query = '*'; 
    $from_table = 'fe_users'; 
    $where_clause = 'username="'.$uname.'"'; 

    $test = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_query, $from_table, $where_clause); 

    if ($GLOBALS['TYPO3_DB']->sql_num_rows($test)) { 

     $this->addFlashMessage('Username is already taken.', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR); 

     $this->redirect('new'); 

    } else { 

     // do stuff when the username isn't taken yet 
    } 
} 

불행히도 및 obivously, 새로운 작업으로 다시 리디렉션하면 필드가 다시 비어 있습니다.
인수를 새 작업으로 다시 전달하고 양식을 채울 수있는 방법이 있습니까?

답변

2

예, extbase에는 표준화 된 방법이 있습니다. 다음과 같이 작동합니다.

조치가 호출되면 유효성 검증이 문서 검토 주석에서 해제 된 경우를 제외하고 해당 매개 변수의 유효성이 검사됩니다. 유효성 검사가 실패하면 이전 매개 변수 (예 : 제출 된 양식이 포함 된보기)가 동일한 매개 변수로 다시 호출됩니다. 다음과 같이

이를 사용할 수 있습니다

/** 
* @param \Vendor\Feregister\Domain\Model\FeUserX $newFeUserX 
* @ignorevalidation $newFeUserX 
*/ 
public function newAction(\Vendor\Feregister\Domain\Model\FeUserX $newFeUserX = null) 
{ 
    $this->view->assign('user', $newFeUserX); 
    // View renders form with name="newFeUserX" and object="{user}", 
    // action="create", fields use the property-attribute to fill 
    // in values and field names. 
} 

/** 
* @param \Vendor\Feregister\Domain\Model\FeUserX $newFeUserX 
* @validate $newFeUserX \Vendor\Feregister\Validator\UsernameDoesNotExistValidator 
*/ 
public function createAction(\Vendor\Feregister\Domain\Model\FeUserX $newFeUserX) 
{ 
    // Do something with the user - you can be sure the username 
    // is not yet taken 
} 

클래스 \Vendor\Feregister\Validator\UsernameDoesNotExistValidatorValidatorInterface를 구현, 또는 AbstractValidator를 확장하는 사용자 정의 유효성 검사기입니다. 그것은 기본적으로 createAction (아마도 $GLOBALS['TYPO3_DB'] 대신 리포지토리를 사용하여)에서 유효성 검사를 수행해야합니다. 유효성 검사기는 표준 오류로 오류를 반환하므로 좋은 오류 메시지를 쉽게 표시하고 지역화 할 수 있습니다.

유효성 검사가 실패하면 extbase는 양식을 렌더링 한 작업 (이 경우 new -action)으로 전달하려고 시도합니다. 이 경우 new -action의 @ignorevalidation 특수 효과로 인해 작동합니다.

또한 유효성 검사 오류에 대한 정보는보기에서 사용할 수 있으며 ViewHelper f:form.validationResults을 사용하여 렌더링 할 수 있습니다.

+0

나는 잠시 동안 작업을 해왔고 그 사용자 정의 유효성 검사를 실행하는 방법을 알 수 없습니다 ... TYPO3 7.6의 최신 튜토리얼을 알고 있습니까? – Norman

+0

검사기를 보여줄 수 있습니까? 전혀 부르지 않니? 그 안에'die' 나'var_dump' 문을 사용해보십시오. 또한 주석을 업데이트 한 후에는 항상 설치 도구에서 캐시를 지우십시오. – Jost

+0

좋아, 나는 모든 것을 올바르게했다. 캐싱 문제가 있었다. 확장 프로그램을 제거했다가 다시 설치해야만 설치 도구에서 캐시를 지울 수 없습니다. – Norman