99 lines
3.4 KiB
PHP
99 lines
3.4 KiB
PHP
<?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\FormTypeInterface;
|
|
use Symfony\Component\Form\Type\AbstractFieldType;
|
|
use Symfony\Component\Form\Type\Loader\TypeLoaderInterface;
|
|
use Symfony\Component\Form\Type\Loader\DefaultTypeLoader;
|
|
use Symfony\Component\Form\Renderer\Theme\FormThemeFactoryInterface;
|
|
use Symfony\Component\Form\Renderer\Theme\PhpThemeFactory;
|
|
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);
|
|
$defaultThemeFactory = new PhpThemeFactory($charset);
|
|
return self::createInstance($defaultThemeFactory, $validator, $csrfProvider, $tempStorage, $entityManager);
|
|
}
|
|
|
|
/**
|
|
* Factory method to simplify creation of a default form factory.
|
|
*
|
|
* @param FormThemeFactoryInterface $themeFactory
|
|
* @param ValidatorInterface $validator
|
|
* @param CsrfProviderInterface $crsfProvider
|
|
* @param TemporaryStorage $tempStorage
|
|
* @param \Doctrine\ORM\EntityManager $entityManager
|
|
* @return DefaultFormFactory
|
|
*/
|
|
public static function createInstance(FormThemeFactoryInterface $themeFactory,
|
|
ValidatorInterface $validator,
|
|
CsrfProviderInterface $crsfProvider,
|
|
TemporaryStorage $tempStorage,
|
|
$entityManager = null)
|
|
{
|
|
$typeLoader = new DefaultTypeLoader();
|
|
$factory = new self($typeLoader);
|
|
$typeLoader->initialize($factory, $themeFactory, null, $crsfProvider, $validator, $tempStorage, $entityManager);
|
|
|
|
return $factory;
|
|
}
|
|
|
|
/**
|
|
* @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);
|
|
}
|
|
} |