This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
symfony/src/Symfony/Component/Form/Button.php

448 lines
8.5 KiB
PHP
Raw Normal View History

2012-12-31 14:29:36 +00:00
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Form;
use Symfony\Component\Form\Exception\AlreadySubmittedException;
2012-12-30 15:38:36 +00:00
use Symfony\Component\Form\Exception\BadMethodCallException;
2012-12-31 14:29:36 +00:00
/**
2013-04-11 15:58:10 +01:00
* A form button.
2012-12-31 14:29:36 +00:00
*
* @author Bernhard Schussek <bschussek@gmail.com>
*/
class Button implements \IteratorAggregate, FormInterface
{
/**
2019-03-12 20:16:42 +00:00
* @var FormInterface
2012-12-31 14:29:36 +00:00
*/
private $parent;
/**
* @var FormConfigInterface
*/
private $config;
/**
2014-04-16 11:30:19 +01:00
* @var bool
2012-12-31 14:29:36 +00:00
*/
private $submitted = false;
2012-12-31 14:29:36 +00:00
/**
* Creates a new button from a form configuration.
*/
public function __construct(FormConfigInterface $config)
{
$this->config = $config;
}
/**
* Unsupported method.
*
* @param mixed $offset
*
* @return bool Always returns false
2012-12-31 14:29:36 +00:00
*/
public function offsetExists($offset)
{
return false;
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @param mixed $offset
*
* @throws BadMethodCallException
2012-12-31 14:29:36 +00:00
*/
public function offsetGet($offset)
{
throw new BadMethodCallException('Buttons cannot have children.');
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @param mixed $offset
* @param mixed $value
*
* @throws BadMethodCallException
2012-12-31 14:29:36 +00:00
*/
public function offsetSet($offset, $value)
{
throw new BadMethodCallException('Buttons cannot have children.');
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @param mixed $offset
*
* @throws BadMethodCallException
2012-12-31 14:29:36 +00:00
*/
public function offsetUnset($offset)
{
throw new BadMethodCallException('Buttons cannot have children.');
2012-12-31 14:29:36 +00:00
}
/**
* {@inheritdoc}
*/
public function setParent(FormInterface $parent = null)
{
if ($this->submitted) {
throw new AlreadySubmittedException('You cannot set the parent of a submitted button');
}
2012-12-31 14:29:36 +00:00
$this->parent = $parent;
2019-03-12 20:16:42 +00:00
return $this;
2012-12-31 14:29:36 +00:00
}
/**
* {@inheritdoc}
*/
public function getParent()
{
return $this->parent;
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @throws BadMethodCallException
2012-12-31 14:29:36 +00:00
*/
2019-01-16 09:39:14 +00:00
public function add($child, $type = null, array $options = [])
2012-12-31 14:29:36 +00:00
{
throw new BadMethodCallException('Buttons cannot have children.');
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @param string $name
*
* @throws BadMethodCallException
2012-12-31 14:29:36 +00:00
*/
public function get($name)
{
throw new BadMethodCallException('Buttons cannot have children.');
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*
* @param string $name
*
* @return bool Always returns false
2012-12-31 14:29:36 +00:00
*/
public function has($name)
{
return false;
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
* @param string $name
*
* @throws BadMethodCallException
2012-12-31 14:29:36 +00:00
*/
public function remove($name)
{
throw new BadMethodCallException('Buttons cannot have children.');
2012-12-31 14:29:36 +00:00
}
/**
* {@inheritdoc}
*/
public function all()
{
2019-01-16 09:39:14 +00:00
return [];
2012-12-31 14:29:36 +00:00
}
/**
* {@inheritdoc}
*/
public function getErrors($deep = false, $flatten = true)
2012-12-31 14:29:36 +00:00
{
2019-01-16 09:39:14 +00:00
return new FormErrorIterator($this, []);
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*
* This method should not be invoked.
*
2015-03-20 13:26:52 +00:00
* @param mixed $modelData
2019-03-12 20:16:42 +00:00
*
* @return $this
2012-12-31 14:29:36 +00:00
*/
public function setData($modelData)
{
2019-03-12 20:16:42 +00:00
// no-op, called during initialization of the form tree
return $this;
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*/
public function getData()
{
2019-03-12 20:16:42 +00:00
return null;
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*/
public function getNormData()
{
2019-03-12 20:16:42 +00:00
return null;
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*/
public function getViewData()
{
2019-03-12 20:16:42 +00:00
return null;
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*
* @return array Always returns an empty array
2012-12-31 14:29:36 +00:00
*/
public function getExtraData()
{
2019-01-16 09:39:14 +00:00
return [];
2012-12-31 14:29:36 +00:00
}
/**
* Returns the button's configuration.
*
2019-03-12 20:16:42 +00:00
* @return FormConfigInterface The configuration instance
2012-12-31 14:29:36 +00:00
*/
public function getConfig()
{
return $this->config;
}
/**
* Returns whether the button is submitted.
*
* @return bool true if the button was submitted
2012-12-31 14:29:36 +00:00
*/
public function isSubmitted()
2012-12-31 14:29:36 +00:00
{
return $this->submitted;
2012-12-31 14:29:36 +00:00
}
/**
* Returns the name by which the button is identified in forms.
*
* @return string The name of the button
2012-12-31 14:29:36 +00:00
*/
public function getName()
{
return $this->config->getName();
}
/**
* Unsupported method.
*/
public function getPropertyPath()
{
2019-03-12 20:16:42 +00:00
return null;
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*
* @throws BadMethodCallException
2012-12-31 14:29:36 +00:00
*/
public function addError(FormError $error)
{
throw new BadMethodCallException('Buttons cannot have errors.');
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*
* @return bool Always returns true
2012-12-31 14:29:36 +00:00
*/
public function isValid()
{
return true;
}
/**
* Unsupported method.
*
* @return bool Always returns false
2012-12-31 14:29:36 +00:00
*/
public function isRequired()
{
return false;
}
/**
* {@inheritdoc}
*/
public function isDisabled()
{
2019-03-12 20:16:42 +00:00
if ($this->parent && $this->parent->isDisabled()) {
return true;
}
2019-03-12 20:16:42 +00:00
return $this->config->getDisabled();
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*
* @return bool Always returns true
2012-12-31 14:29:36 +00:00
*/
public function isEmpty()
{
return true;
}
/**
* Unsupported method.
*
* @return bool Always returns true
2012-12-31 14:29:36 +00:00
*/
public function isSynchronized()
{
return true;
}
/**
* Unsupported method.
*/
public function getTransformationFailure()
{
2019-03-12 20:16:42 +00:00
return null;
}
/**
* Unsupported method.
*
* @throws BadMethodCallException
*/
public function initialize()
{
2013-05-02 08:53:57 +01:00
throw new BadMethodCallException('Buttons cannot be initialized. Call initialize() on the root form instead.');
}
2012-12-30 15:38:36 +00:00
/**
* Unsupported method.
*
* @param mixed $request
*
* @throws BadMethodCallException
*/
public function handleRequest($request = null)
2012-12-30 15:38:36 +00:00
{
throw new BadMethodCallException('Buttons cannot handle requests. Call handleRequest() on the root form instead.');
2012-12-30 15:38:36 +00:00
}
2012-12-31 14:29:36 +00:00
/**
* Submits data to the button.
2012-12-31 14:29:36 +00:00
*
2019-03-12 20:16:42 +00:00
* @param string|null $submittedData Not used
* @param bool $clearMissing Not used
2012-12-31 14:29:36 +00:00
*
* @return $this
2012-12-31 14:29:36 +00:00
*
* @throws Exception\AlreadySubmittedException if the button has already been submitted
2012-12-31 14:29:36 +00:00
*/
public function submit($submittedData, $clearMissing = true)
2012-12-31 14:29:36 +00:00
{
if ($this->submitted) {
throw new AlreadySubmittedException('A form can only be submitted once');
2012-12-31 14:29:36 +00:00
}
$this->submitted = true;
2012-12-31 14:29:36 +00:00
return $this;
}
/**
* {@inheritdoc}
*/
public function getRoot()
{
return $this->parent ? $this->parent->getRoot() : $this;
}
/**
* {@inheritdoc}
*/
public function isRoot()
{
return null === $this->parent;
}
/**
* {@inheritdoc}
*/
public function createView(FormView $parent = null)
{
if (null === $parent && $this->parent) {
$parent = $this->parent->createView();
}
$type = $this->config->getType();
$options = $this->config->getOptions();
$view = $type->createView($this, $parent);
$type->buildView($view, $this, $options);
$type->finishView($view, $this, $options);
return $view;
2012-12-31 14:29:36 +00:00
}
/**
* Unsupported method.
*
* @return int Always returns 0
2012-12-31 14:29:36 +00:00
*/
public function count()
{
return 0;
}
/**
* Unsupported method.
*
* @return \EmptyIterator Always returns an empty iterator
2012-12-31 14:29:36 +00:00
*/
public function getIterator()
{
return new \EmptyIterator();
}
}