/**
  * @param Translator       $translator
  * @param ProfileValidator $profileValidator
  * @param Collection       $tasksCollection
  */
 public function __construct(Translator $translator, ProfileValidator $profileValidator, Collection $tasksCollection, TaskValidator $taskValidator)
 {
     parent::__construct('user');
     $tasksCollection->setName('tasks')->setTargetElement($taskValidator);
     $collectionInputFilter = new CollectionInputFilter();
     $collectionInputFilter->setInputFilter($taskValidator->getInputFilterSpecification());
     $taskValidator->setOption('collectionInputFilter', $collectionInputFilter);
     $this->validationRules = ['tasks' => $collectionInputFilter];
     return $this->addElements([$profileValidator, $tasksCollection]);
 }
 public function __construct(Translator $translator)
 {
     parent::__construct('task');
     $that = $this;
     $this->validationRules = ['id' => ['allowEmpty' => true, 'required' => false], 'description' => ['required', 'validators' => [['name' => 'NotEmpty', 'break_chain_on_failure' => true, 'options' => ['message' => $translator->translate('You must provide the field description')]], ['name' => 'Callback', 'break_chain_on_failure' => true, 'options' => ['callback' => function ($value, $context = []) use($that) {
         /** @var CollectionInputFilter $collectionInputFilter */
         $collectionInputFilter = $that->getOption('collectionInputFilter');
         $count = 0;
         foreach ($collectionInputFilter->getContext() as $taskSpec) {
             if ($taskSpec['description'] == $value) {
                 $count++;
                 if ($count > 1) {
                     return false;
                 }
             }
         }
         return true;
     }, 'message' => $translator->translate('You cannot create two tasks with the same name')]]]]];
     return $this->addElements(['id', 'description']);
 }