/** * @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']); }