2017-12-18 79 views
0

我想在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發生的是用戶的輸入(他點擊保存按鈕後右)和記錄的持久的關係。所以必須有一種方法來防止新數據的持續存在,不僅要隨意改變它。

我希望這能讓我的問題更清楚,我不知道還有什麼可以寫的來解釋它。

+0

向我們展示你嘗試過什麼。我認爲eval一定是要走的路。 –

+0

我編輯了我的問題並添加了我擁有的評估代碼。但真的,沒有什麼特別的,只是一個IPv4評估。 – Mondblut

回答

0

我向你展示一個TCA驗證的例子。如果驗證失敗,記錄無法保存。

文件myextension /班/驗證/識別/ 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 /班/域/型號/ 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;