BEユーザーが制限付きで入力した場合にレコードがバックエンドに保存されないようにTCAの特定のフィールドに対してTYPO3で評価を実装したい値(何も入力しないか、入力に特定の文字が含まれているかのように)。今のところ、私はそれが許可されていない場合にのみ、eval関数の値を変更することができますが、フィールドが制限された値を持っている間にBEユーザーが 'save'をクリックすると、レコードを保存しないようにします。これはeval経由でも可能ですか?TYPO3拡張:ユーザーが間違った値を入力した場合にレコードを保存しないようにする
編集:これを行う安価な方法は、入力が制限された値であれば、eval関数で$ valueをNULLに設定することですが、SQLエラーが発生する可能性があるためエレガントな方法ではありませんBEユーザを混乱させる。
だから私は基本的にリポジトリを永続化するために...またはバックBEのユーザーが「保存」をクリックする前の状態にレコードを設定するためにTYPO3を防止するための方法が必要です...
EDIT2:これは私が持っているものです...何も刺激的ではなく、単なるIPv4の評価です。しかし、再び値を変更するだけで、入力がIPv4でない場合はレコードの作成や編集を妨げません。
そこで、基本的<?php
namespace Cjk\Icingaconfgen\Evaluation;
use TYPO3\CMS\Core\Messaging\FlashMessage;
use TYPO3\CMS\Core\Messaging\FlashMessageService;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* Class for field value validation/evaluation to be used in 'eval' of TCA
*/
class IPv4Evaluation
{
/**
* @param string $value
* @param string $is_in
* @param bool $set
* @return string
*/
public function evaluateFieldValue($value, $is_in, &$set)
{
if (!filter_var($value, FILTER_VALIDATE_IP)){
$value = 'Fehlerhafte Eingabe (IPv4)';
/** @var FlashMessage $message */
$message = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Messaging\\FlashMessage',
'Fehlerhafte Eingabe: .conf Datei wird nicht erstellt/editiert. Neue services können nicht hinzugefügt oder editiert werden.',
\TYPO3\CMS\Core\Messaging\FlashMessage::ERROR,
TRUE
);
/** @var $flashMessageService FlashMessageService */
$flashMessageService = GeneralUtility::makeInstance(FlashMessageService::class);
$flashMessageService->getMessageQueueByIdentifier()->enqueue($message);
}
return $value;
}
}
、そして私が間違っている場合は、evalがBEユーザーの入力(彼は、保存ボタンをクリックした直後)とレコードの永続化BETWEENたまたま私を修正。だから、新しいデータの永続化を防ぐ方法があるだけでなく、自由に変更することができなければなりません。
これは私の質問がより明確になることを望んでいる、私はそれを説明するために何を書くべきか分からない。
あなたがしようとしたものを、私たちを表示します。私はevalが行く方法でなければならないと思う。 –
私は自分の質問を編集し、私が持っている評価コードを追加しました。しかし、実際には何も特別なものではなく、ちょうどIPv4の評価です。 – Mondblut