/** * Makes this mapping to an ignored field. * * @param Mapping $mapping The mapping object * @param mixed $value The value * * @return Mapping */ public function ignored(Mapping $mapping, $value) { $emitter = $mapping->getEmitter(); $emitter->on(Events::APPLIED, function (Data $data) use($value) { $data->setErrors([]); $data->setResult($value); }); return $mapping; }
/** * Enables object validation. * * @param Mapping $mapping The mapping object * * @return Mapping */ public function enableObjectValidation(Mapping $mapping) { $emitter = $mapping->getEmitter(); $emitter->on(Events::APPLIED, function (Data $data) { $vios = $this->validator->validate($data->getResult()); foreach ($vios as $vio) { $propertyPath = new PropertyPath($vio->getPropertyPath()); $data->addError(new Error($vio->getMessage(), $propertyPath->getElements())); } }); return $mapping; }
/** * Adds a transformer. * * @param Mapping $mapping The mapping object * @param Transformer $transformer The transformer * * @return Mapping */ public function transform(Mapping $mapping, Transformer $transformer) { $emitter = $mapping->getEmitter(); $emitter->on(Events::APPLIED, function (Data $data) use($transformer) { if (count($data->getErrors()) > 0) { return; } $data->setResult($transformer->transform($data->getResult())); }); $emitter->on(Events::UNAPPLY, function (Data $data) use($transformer) { $data->setInput($transformer->reverseTransform($data->getInput())); }); return $mapping; }
/** * Adds a constraint. * * @param Mapping $mapping The mapping object * @param Constraint $constraint The constaint object * * @return Mapping */ public function validate(Mapping $mapping, Constraint $cons) { $emitter = $mapping->getEmitter(); $emitter->on(Events::APPLIED, function (Data $data) use($cons) { if (count($data->getErrors()) > 0) { return; } if (false === $cons->check($data->getResult())) { $error = new Error($cons->getMessage(), $data->getPropertyPath()); $data->addError($error); } }); return $mapping; }
/** * Makes this mapping optional. * * @param Mapping $mapping The mapping object * * @return Mapping */ public function optional(Mapping $mapping) { $emitter = $mapping->getEmitter(); $emitter->on(Events::APPLIED, function (Data $data) { if (0 === count($data->getErrors())) { return; } foreach ($data->getErrors() as $error) { if ('error.required' === $error->getMessage()) { $data->removeError($error); } } }); return $mapping; }
/** * Returns a form. * * @param Mapping $mapping The mapping object * * @return Form */ public function form(Mapping $mapping, $path = []) { $children = []; foreach ($mapping->getChildren() as $name => $child) { $children[$name] = $child->form(array_merge($path, [$name])); } $form = new Form($mapping, $children, $path); $emitter = $mapping->getEmitter(); $emitter->on(Events::APPLIED, function (Data $data) use($form) { $form->setData($data->getResult()); $form->setValue($data->getInput()); $form->setErrors($data->getErrors()); }); $emitter->on(Events::UNAPPLIED, function (Data $data) use($form) { $form->setValue($data->getResult()); }); return $form; }