我想在TYPO3中爲TCA中的特定字段實施評估,以防止記錄被保存在後端,如果BE用戶輸入限制值(例如,如果不輸入任何內容或輸入包含特定字符)。到目前爲止,我只能改變eval函數中的值,如果它不被允許的話,但是如果BE用戶在字段限制值時點擊'保存',我想要保存記錄不被保存。這甚至可以通過評估嗎?TYPO3擴展:如果用戶輸入錯誤值,防止記錄被保存
編輯:一個便宜的方法可以在eval函數中將$ value設置爲NULL,如果輸入是受限值的,但這絕對不是執行任務的優雅方法,因爲它會拋出SQL錯誤混淆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發生的是用戶的輸入(他點擊保存按鈕後右)和記錄的持久的關係。所以必須有一種方法來防止新數據的持續存在,不僅要隨意改變它。
我希望這能讓我的問題更清楚,我不知道還有什麼可以寫的來解釋它。
向我們展示你嘗試過什麼。我認爲eval一定是要走的路。 –
我編輯了我的問題並添加了我擁有的評估代碼。但真的,沒有什麼特別的,只是一個IPv4評估。 – Mondblut