簡體   English   中英

TYPO3:在提交表單后保留表單

[英]TYPO3: Keep forms filled after form submit

我創建了一個擴展,該擴展允許用戶通過前端進行注冊。 我不能使用工作的,因為客戶要求特殊任務。

這是檢測采用用戶名的代碼。

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
    }
}

但是不幸的是,當重定向回到新操作時,這些字段再次為空。
有沒有一種方法可以將參數傳遞回新操作並填寫表格?

是的,並且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\\UsernameDoesNotExistValidator是實現ValidatorInterface或擴展AbstractValidator的自定義驗證器。 它基本上應該執行您在createAction中正在執行的驗證(也許使用存儲庫而不是$GLOBALS['TYPO3_DB'] )。 驗證器以標准方式返回錯誤,從而更容易顯示好錯誤消息並將其本地化。

如果驗證失敗,則extbase將嘗試轉發給呈現表單的操作,在本例中為new -action。 在這種情況下,由於new -action上的@ignorevalidation批注,它可以工作。

此外,視圖中還提供了有關驗證錯誤的信息,您可以使用ViewHelper f:form.validationResults呈現它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM