繁体   English   中英

TYPO3扩展名:如果用户输入错误的值,则防止保存记录

[英]TYPO3 extension: Prevent record to be saved if the user enters the wrong value

我想为TCPO中的特定字段在TYPO3中实现一个评估,以防止BE用户输入受限值(例如,如果不输入任何内容或输入包含特定字符)将记录保存在后端中。 到目前为止,我只能在不允许的情况下更改eval函数中的值,但是如果BE用户在字段具有受限值的情况下单击“保存”,则我希望记录不被保存。 通过评估甚至可能吗?

编辑:一种便宜的方法是将eval函数中的$ value设置为NULL,如果输入的值是一个受限制的值,但这绝对不是一种优雅的处理方式,因为它会引发可能会使BE用户感到困惑的SQL错误。

因此,我基本上需要一种方法来防止TYPO3持久存储库...或将记录设置回BE用户单击“保存”之前的状态...

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

所以基本上,如果我错了,请纠正我,评估将在BE用户的输入(在他单击保存按钮之后立即发生)和记录的持久化之间发生。 因此,必须有一种方法来防止新数据的持久化,而不仅仅是随意更改。

我希望这使我的问题现在更加清楚,我不知道还要写些什么来解释它。

我向您展示了一个在TCA中进行验证的示例。 如果验证失败,则无法保存记录。

文件myextension / Classes / Validation / Validator / MinReferencesValidator.php

<?php
namespace Vendor\Myextension\Validation\Validator;

/**
 * Validator for min references
 */
class MinReferencesValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {

    /**
     * @var array
     */
    protected $supportedOptions = [
            'min' => [0, 'The minimum references to accept', 'integer'],
    ];

    /**
     * The given value is valid if it contains more then min items
     *
     * @param mixed $value The value that should be validated
     * @return void
     */
    public function isValid($value) {

        if (!is_object($value)) {
            $this->addError(
                    $this->translateErrorMessage(
                            'LLL:EXT:myextension/Resources/Private/Language/locallang.xlf:validator_object_notvalid',
                            'myextension'
                    ), 1489870657);
            return;
        }

        $minimum = $this->options['min'];
        $countItems = count($value);

        if ($countItems < $minimum) {
            $this->addError(
                    $this->translateErrorMessage(
                            'LLL:EXT: myextension/Resources/Private/Language/locallang.xlf:validator_min_references',
                            'myextension',
                            [
                                $minimum
                            ]
            ), 1489872300, [$minimum]);
            return;
        }
    }

}

文件myextension / Classes / Domain / Model / Youritem.php

/**
 * Image of supplier (image reference)
 *
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference>
 * @validate NotEmpty, \Vendor\Yourextension\Validation\Validator\MinReferencesValidator(min=1)
 */
protected $images;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM