2016-08-16 14 views
0

ユーザーがフロントエンドからサインアップできる拡張機能を作成しました。クライアントが特別な仕事を要求したので、私は働くものを使うことができませんでした。TYPO3:フォーム提出後にフォームを保存する

これは撮影したユーザー名を検出するコードです。

残念ながら、わかりやすく、新しいアクションにリダイレクトすると、フィールドは再び空になります。
引数を新しいアクションに戻してフォームに記入する方法はありますか?

答えて

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

関連する問題