[Form] Add a form error if post_max_size has been reached.

This commit is contained in:
rpg600 2014-09-08 10:53:21 +02:00 committed by Bernhard Schussek
parent e47e4fa56d
commit 47802105d3
3 changed files with 58 additions and 0 deletions

View File

@ -12,6 +12,8 @@
namespace Symfony\Component\Form\Extension\HttpFoundation;
use Symfony\Component\Form\Exception\UnexpectedTypeException;
use Symfony\Component\Form\Extension\Validator\Util\ServerParams;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\RequestHandlerInterface;
use Symfony\Component\HttpFoundation\Request;
@ -24,6 +26,19 @@ use Symfony\Component\HttpFoundation\Request;
*/
class HttpFoundationRequestHandler implements RequestHandlerInterface
{
/**
* @var ServerParams
*/
private $serverParams;
/**
* {@inheritdoc}
*/
public function __construct(ServerParams $params = null)
{
$this->serverParams = $params ?: new ServerParams();
}
/**
* {@inheritdoc}
*/
@ -61,6 +76,10 @@ class HttpFoundationRequestHandler implements RequestHandlerInterface
$params = $request->request->get($name, $default);
$files = $request->files->get($name, $default);
} else {
if ($this->serverParams->getContentLength() > $this->serverParams->getPostMaxSize()) {
$form->addError(new FormError('Max post size exceeded.'));
}
// Don't submit the form if it is not present in the request
return;
}

View File

@ -12,6 +12,7 @@
namespace Symfony\Component\Form;
use Symfony\Component\Form\Exception\UnexpectedTypeException;
use Symfony\Component\Form\Extension\Validator\Util\ServerParams;
/**
* A request handler using PHP's super globals $_GET, $_POST and $_SERVER.
@ -20,6 +21,19 @@ use Symfony\Component\Form\Exception\UnexpectedTypeException;
*/
class NativeRequestHandler implements RequestHandlerInterface
{
/**
* @var ServerParams
*/
private $serverParams;
/**
* {@inheritdoc}
*/
public function __construct(ServerParams $params = null)
{
$this->serverParams = $params ?: new ServerParams();
}
/**
* The allowed keys of the $_FILES array.
*
@ -75,6 +89,10 @@ class NativeRequestHandler implements RequestHandlerInterface
$params = array_key_exists($name, $_POST) ? $_POST[$name] : $default;
$files = array_key_exists($name, $fixedFiles) ? $fixedFiles[$name] : $default;
} else {
if ($this->serverParams->getContentLength() > $this->serverParams->getPostMaxSize()) {
$form->addError(new FormError('Max post size exceeded.'));
}
// Don't submit the form if it is not present in the request
return;
}

View File

@ -11,6 +11,8 @@
namespace Symfony\Component\Form\Tests;
use Symfony\Component\Form\Forms;
/**
* @author Bernhard Schussek <bschussek@gmail.com>
*/
@ -21,11 +23,17 @@ abstract class AbstractRequestHandlerTest extends \PHPUnit_Framework_TestCase
*/
protected $requestHandler;
/**
* @var \Symfony\Component\Form\FormFactory
*/
protected $factory;
protected $request;
protected function setUp()
{
$this->requestHandler = $this->getRequestHandler();
$this->factory = Forms::createFormFactoryBuilder()->getFormFactory();
$this->request = null;
}
@ -249,6 +257,19 @@ abstract class AbstractRequestHandlerTest extends \PHPUnit_Framework_TestCase
$this->requestHandler->handleRequest($form, $this->request);
}
public function testAddFormErrorIfPostMaxSizeExceeded()
{
$form = $this->factory->createNamed('name', 'text');
$this->setRequestData('POST', array(), array());
$_SERVER['CONTENT_LENGTH'] = 1000000000;
$this->requestHandler->handleRequest($form, $this->request);
$this->assertEquals("ERROR: Max post size exceeded.\n", $form->getErrorsAsString());
unset($_SERVER['CONTENT_LENGTH']);
}
abstract protected function setRequestData($method, $data, $files = array());
abstract protected function getRequestHandler();