[Form] Add DefaultFormFactory for convenience usage outside of a DIC context.
This commit is contained in:
parent
39c2d3f166
commit
c05b3c440d
98
src/Symfony/Component/Form/DefaultFormFactory.php
Normal file
98
src/Symfony/Component/Form/DefaultFormFactory.php
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien.potencier@symfony-project.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\HttpFoundation\File\TemporaryStorage;
|
||||||
|
use Symfony\Component\Validator\ValidatorInterface;
|
||||||
|
use Symfony\Component\Form\FormFactoryInterface;
|
||||||
|
use Symfony\Component\Form\Type;
|
||||||
|
use Symfony\Component\Form\Type\FieldTypeInterface;
|
||||||
|
use Symfony\Component\Form\Renderer\Theme\ThemeInterface;
|
||||||
|
use Symfony\Component\Form\Type\Loader\TypeLoaderInterface;
|
||||||
|
use Symfony\Component\Form\Type\Loader\DefaultTypeLoader;
|
||||||
|
use Symfony\Component\Form\Type\AbstractFieldType;
|
||||||
|
use Symfony\Component\Form\CsrfProvider\CsrfProviderInterface;
|
||||||
|
use Symfony\Component\Form\CsrfProvider\DefaultCsrfProvider;
|
||||||
|
use Doctrine\ORM\EntityManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Form Factory simplifies the construction and usage of the form component in a non-dependency injection context.
|
||||||
|
*
|
||||||
|
* @author Benjamin Eberlei <kontakt@beberlei.de>
|
||||||
|
*/
|
||||||
|
class DefaultFormFactory extends FormFactory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Create a default form factory from as few inputs as necessary.
|
||||||
|
*
|
||||||
|
* NOTICE: Make the csrf secret and storage secret longer rather than shorter, but keep them constant across all requests!
|
||||||
|
*
|
||||||
|
* @param ValidatorInterface $validator
|
||||||
|
* @param string $csrfSecret
|
||||||
|
* @param string $storageSecret
|
||||||
|
* @param string $charset
|
||||||
|
* @param \Doctrine\ORM\EntityManager $entityManager
|
||||||
|
* @return DefaultFormFactory
|
||||||
|
*/
|
||||||
|
public static function createDefault(ValidatorInterface $validator, $csrfSecret, $storageSecret, $charset = 'UTF-8', $entityManager = null)
|
||||||
|
{
|
||||||
|
$csrfProvider = new DefaultCsrfProvider($csrfSecret);
|
||||||
|
$tempStorage = new TemporaryStorage($storageSecret);
|
||||||
|
$defaultTheme = new PhpTheme($charset);
|
||||||
|
return self::create($defaultTheme, $validator, $csrfProvider, $tempStorage, $entityManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory method to simplify creation of a default form factory.
|
||||||
|
*
|
||||||
|
* @param ThemeInterface $theme
|
||||||
|
* @param ValidatorInterface $validator
|
||||||
|
* @param CsrfProviderInterface $crsfProvider
|
||||||
|
* @param TemporaryStorage $tempStorage
|
||||||
|
* @param \Doctrine\ORM\EntityManager $entityManager
|
||||||
|
* @return DefaultFormFactory
|
||||||
|
*/
|
||||||
|
public static function create(ThemeInterface $theme,
|
||||||
|
ValidatorInterface $validator,
|
||||||
|
CsrfProviderInterface $crsfProvider,
|
||||||
|
TemporaryStorage $tempStorage,
|
||||||
|
$entityManager = null)
|
||||||
|
{
|
||||||
|
$typeLoader = new DefaultTypeLoader();
|
||||||
|
$factory = new self($typeLoader);
|
||||||
|
$typeLoader->initialize($factory, $theme, $crsfProvider, $validator, $tempStorage, $entityManager);
|
||||||
|
|
||||||
|
return new self($typeLoader);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var TypeLoaderInterface
|
||||||
|
*/
|
||||||
|
private $typeLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param TypeLoaderInterface $typeLoader
|
||||||
|
*/
|
||||||
|
public function __construct(TypeLoaderInterface $typeLoader)
|
||||||
|
{
|
||||||
|
$this->typeLoader = $typeLoader;
|
||||||
|
parent::__construct($typeLoader);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param AbstractFieldType $config
|
||||||
|
*/
|
||||||
|
public function addConfig(AbstractFieldType $config)
|
||||||
|
{
|
||||||
|
$this->typeLoader->addConfig($config);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user