gpt4 book ai didi

typo3 - TYPO3 TCA自己评估(验证)三个字段的组合

转载 作者:行者123 更新时间:2023-12-01 06:03:09 26 4
gpt4 key购买 nike

我阅读了https://docs.typo3.org/typo3cms/TCAReference/ColumnsConfig/Type/Input.html#eval并尝试了自己的评估。

它应使用此逻辑评估三个字段的组合:
需要start_date和end_date(不为空)或date_on_request是必需的。

类已加载,函数validateFieldValue()可以工作,但是我错过了表单中的反馈。

<?php
namespace Vendor\Extension\Evaluation;

class StartDateAndEndDateOrDateOnRequestEvaluation {

/**
* JavaScript code for client side validation/evaluation
*
* @return string JavaScript code for client side validation/evaluation
*/
public function returnFieldJS() {
return 'return value;';
}

/**
* Server-side validation/evaluation on saving the record
*
* @param string $value The field value to be evaluated
* @param string $is_in The "is_in" value of the field configuration from TCA
* @param bool $set Boolean defining if the value is written to the database or not.
* @return string Evaluated field value
*/
public function evaluateFieldValue($value, $is_in, &$set) {

foreach($_POST['data']['tx_extension_domain_model_course'] as $id => $course) {
if ( (!empty($course['start_date']) && !empty($course['start_date'])) || !empty($course['date_on_request']) ) {
$set = true;
} else {
$set = false;
}
}
return $value;
}

/**
* Server-side validation/evaluation on opening the record
*
* @param array $parameters Array with key 'value' containing the field value from the database
* @return string Evaluated field value
*/
public function deevaluateFieldValue(array $parameters) {
return $parameters['value'];
}

}


我正在寻找示例,如何在JavaScript(returnFieldJS)中进行验证:
-如何获得三个领域?
-如何设置错误类别?

我应该在评价字段值()中检查什么?

最佳答案

returnFieldJS()字段不调用方法deevaluateFieldValue(array $parameters)datetime。这就是为什么我认为没有干净的方法可以将JavaScript验证添加到datetime字段。
要在后端获取错误消息,您可以使用FlashMessageService。我实现了一个示例,以检查course_end日期是否在course_start日期之后:

<?php
namespace Vendor\Extension\Evaluation;

use TYPO3\CMS\Core\Messaging\FlashMessage;
use TYPO3\CMS\Core\Messaging\FlashMessageService;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Object\ObjectManager;

class StartDateAndEndDateOrDateOnRequestEvaluation {
/**
* JavaScript code for client side validation/evaluation
*
* @return string JavaScript code for client side validation/evaluation
*/
public function returnFieldJS()
{
return 'return value;';
}

/**
* Server-side validation/evaluation on saving the record
*
* @param string $value The field value to be evaluated
* @param string $is_in The "is_in" value of the field configuration from TCA
* @param bool $set Boolean defining if the value is written to the database or not.
* @return string Evaluated field value
*/
public function evaluateFieldValue($value, $is_in, &$set)
{
$formData = GeneralUtility::_GP('data');
$courseId = key($formData['tx_extension_domain_model_course']);
$course = $formData['tx_extension_domain_model_course'][$courseId];

$courseStart = new \DateTime($course['course_start']);
$courseEnd = new \DateTime($course['course_end']);

if ($courseStart > $courseEnd) {
$this->flashMessage('Invalid field value', 'Course end date can not be before course start date!', FlashMessage::ERROR);
$set = false; //do not save value
}

return $value;
}

/**
* Server-side validation/evaluation on opening the record
*
* @param array $parameters Array with key 'value' containing the field value from the database
* @return string Evaluated field value
*/
public function deevaluateFieldValue(array $parameters)
{
return $parameters['value'];
}

/**
* @param string $messageTitle
* @param string $messageText
* @param int $severity
*/
protected function flashMessage($messageTitle, $messageText, $severity = FlashMessage::ERROR)
{
$message = GeneralUtility::makeInstance(
FlashMessage::class,
$messageText,
$messageTitle,
$severity,
true
);

$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$flashMessageService = $objectManager->get(FlashMessageService::class);
$messageQueue = $flashMessageService->getMessageQueueByIdentifier();
$messageQueue->addMessage($message);
}
}

关于typo3 - TYPO3 TCA自己评估(验证)三个字段的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42986309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com