2017-12-18 8 views
0

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たまたま私を修正。だから、新しいデータの永続化を防ぐ方法があるだけでなく、自由に変更することができなければなりません。

これは私の質問がより明確になることを望んでいる、私はそれを説明するために何を書くべきか分からない。

+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; 
関連する問題