addAttributes($attributes);
}
$this->setName($name);
}
public function getDescription()
{
return $this->description;
}
/**
* Set the description of the element
*
* @param string $description
*
* @return $this
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
public function getLabel()
{
return $this->label;
}
/**
* Set the label of the element
*
* @param string $label
*
* @return $this
*/
public function setLabel($label)
{
$this->label = $label;
return $this;
}
public function getName()
{
return $this->name;
}
/**
* Set the name for the element
*
* @param string $name
*
* @return $this
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
public function isIgnored()
{
return $this->ignored;
}
/**
* Set whether the element is ignored
*
* @param bool $ignored
*
* @return $this
*/
public function setIgnored($ignored = true)
{
$this->ignored = (bool) $ignored;
return $this;
}
public function isRequired()
{
return $this->required;
}
/**
* Set whether the element is required
*
* @param bool $required
*
* @return $this
*/
public function setRequired($required = true)
{
$this->required = (bool) $required;
return $this;
}
public function isValid()
{
if ($this->valid === null) {
$this->validate();
}
return $this->valid;
}
/**
* Get whether the element has been validated and is not valid
*
* @return bool
*
* @deprecated Use {@link hasBeenValidated()} in combination with {@link isValid()} instead
*/
public function hasBeenValidatedAndIsNotValid()
{
return $this->valid !== null && ! $this->valid;
}
/**
* Get the validators
*
* @return ValidatorChain
*/
public function getValidators()
{
if ($this->validators === null) {
$this->validators = new ValidatorChain();
$this->addDefaultValidators();
}
return $this->validators;
}
/**
* Add default validators
*/
public function addDefaultValidators()
{
}
/**
* Set the validators
*
* @param iterable $validators
*
* @return $this
*/
public function setValidators($validators)
{
$this
->getValidators()
->clearValidators()
->addValidators($validators);
return $this;
}
/**
* Add validators
*
* @param iterable $validators
*
* @return $this
*/
public function addValidators($validators)
{
$this->getValidators()->addValidators($validators);
return $this;
}
public function hasValue()
{
$value = $this->getValue();
return $value !== null && $value !== '' && $value !== [];
}
public function getValue()
{
return $this->value;
}
public function setValue($value)
{
if ($value === '') {
$this->value = null;
} else {
$this->value = $value;
}
$this->valid = null;
return $this;
}
public function getValueCandidates()
{
return $this->valueCandidates;
}
public function setValueCandidates(array $values)
{
$this->valueCandidates = $values;
return $this;
}
public function onRegistered(Form $form)
{
}
/**
* Validate the element using all registered validators
*
* @return $this
*/
public function validate()
{
$this->valid = $this->getValidators()->isValid($this->getValue());
$this->addMessages($this->getValidators()->getMessages());
return $this;
}
public function hasBeenValidated()
{
return $this->valid !== null;
}
/**
* Callback for the name attribute
*
* @return Attribute|string
*/
public function getNameAttribute()
{
return $this->getName();
}
/**
* Callback for the required attribute
*
* @return Attribute|null
*/
public function getRequiredAttribute()
{
if ($this->isRequired()) {
return new Attribute('required', true);
}
return null;
}
/**
* Callback for the value attribute
*
* @return mixed
*/
public function getValueAttribute()
{
return $this->getValue();
}
protected function registerValueCallback(Attributes $attributes)
{
$attributes->registerAttributeCallback(
'value',
[$this, 'getValueAttribute'],
[$this, 'setValue']
);
}
protected function registerAttributeCallbacks(Attributes $attributes)
{
$this->registerValueCallback($attributes);
$attributes
->registerAttributeCallback('label', null, [$this, 'setLabel'])
->registerAttributeCallback('name', [$this, 'getNameAttribute'], [$this, 'setName'])
->registerAttributeCallback('description', null, [$this, 'setDescription'])
->registerAttributeCallback('validators', null, [$this, 'setValidators'])
->registerAttributeCallback('ignore', null, [$this, 'setIgnored'])
->registerAttributeCallback('required', [$this, 'getRequiredAttribute'], [$this, 'setRequired']);
$this->registerCallbacks();
}
/** @deprecated Use {@link registerAttributeCallbacks()} instead */
protected function registerCallbacks()
{
}
}