Symfony Framework 외부에서 사용하기 위해 Symfony 2.3 Form Standalone 구성 요소를 사용하려고합니다. Symfony 2.3/2.4 Standalone Form Component
나는 위의 URL 코드 좋은에서 다음 URL을 http://n.clavaud.free.fr/blog/index.php?article31/symfony2-standalone-form-component-tutorial을 시도했지만 그것은 심포니 프레임 워크의 이전 버전을 기반으로합니다.
심포니 2.3을 사용하는 동안
나는 URL에 위와 같이 동일한 코드를 원하지만 그것은 심포니 2.3 또는 다른 제안에 작동합니다 문제는 무엇입니까?
내가 코드 아래 사용하고
<?php
use Symfony\Component\ClassLoader\UniversalClassLoader;
use Symfony\Component\Form\Forms;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormFactory;
use Symfony\Component\Form\FormRenderer;
use Symfony\Component\Form\FormRendererInterface;
use Symfony\Component\Form\Extension\Core\CoreExtension;
use Symfony\Component\Form\Extension\Csrf\CsrfExtension;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\Templating\TemplateNameParser;
use Symfony\Component\Templating\TemplateNameParserInterface;
use Symfony\Component\Templating\TemplateReference;
use Symfony\Component\Templating\Loader\FilesystemLoader;
use Symfony\Component\Templating\PhpEngine;
use Symfony\Component\Translation\MessageSelector;
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Component\Validator\DefaultTranslator;
use Symfony\Bundle\FrameworkBundle\Templating\Helper\FormHelper;
use Symfony\Bundle\FrameworkBundle\Templating\Helper\TranslatorHelper;
// validation
use Symfony\Component\Form\Extension\Validator\ValidatorExtension;
use Symfony\Component\Validator\Validator;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Mapping\ClassMetadataFactory;
use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader;
use Symfony\Component\Validator\ConstraintValidatorFactory;
use Symfony\Component\Validator\Constraints as Constraints;
use Symfony\Component\Validator\Validation;
/**
* Load and configure autoloader
* @see http://symfony.com/doc/2.0/cookbook/tools/autoloader.html
*/
require_once 'Symfony/Component/ClassLoader/UniversalClassLoader.php';
$loader = new UniversalClassLoader();
$loader->register();
$loader->registerNamespace('Symfony', __DIR__.'/');
/**
* Parameters
*/
$locale = null;
/**
* Entity
*/
class Message
{
public $sender;
public $recipient;
public $message;
// validation
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('sender', new Constraints\NotBlank());
$metadata->addPropertyConstraint('sender', new Constraints\Email());
$metadata->addPropertyConstraint('recipient', new Constraints\NotBlank());
$metadata->addPropertyConstraint('recipient', new Constraints\Email());
$metadata->addPropertyConstraint('message', new Constraints\NotBlank());
$metadata->addPropertyConstraint('message', new Constraints\MinLength(10));
}
}
/**
* Form Class
* @see http://symfony.com/doc/2.0/book/forms.html#creating-form-classes
*/
class MessageType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('sender', 'email')
->add('recipient', 'email')
->add('message', 'textarea');
}
public function getName()
{
return 'message';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'new\Message',
);
}
}
/**
* Template name parser
* @see Symfony\Bundle\FrameworkBundle\Tests\Templating\Helper\Fixtures\StubTemplateNameParser
*
* Needed to load the templates used for rendering form items.
*/
class StubTemplateNameParser implements TemplateNameParserInterface
{
private $root;
private $rootTheme;
public function __construct($root, $rootTheme)
{
$this->root = $root;
$this->rootTheme = $rootTheme;
}
public function parse($name)
{
list($bundle, $controller, $template) = explode(':', $name);
if ($template[0] == '_') {
$path = $this->rootTheme.'/Custom/'.$template;
} elseif ($bundle === 'TestBundle') {
$path = $this->rootTheme.'/'.$controller.'/'.$template;
} else {
$path = $this->root.'/'.$controller.'/'.$template;
}
return new TemplateReference($path, 'php');
}
}
/**
* Create an entity
*/
$message = new Message();
$message->sender = '[email protected]';
/**
* Build a form from a form factory
*/
/* $form_factory = new FormFactory(array(
new CoreExtension(),
// validation
new ValidatorExtension(
new Validator(
new ClassMetadataFactory(
new StaticMethodLoader()
),
new ConstraintValidatorFactory(),
new DefaultTranslator()
)
)
));*/
$validator = Validation::createValidator();
$form_factory = Forms::createFormFactoryBuilder()
->addExtension(new CoreExtension())
->addExtension(new ValidatorExtension($validator))
->getFormFactory();
$form = $form_factory->create(new MessageType(), $message);
/**
* Create a PHP template engine
*/
$root = realpath(__DIR__ . '/Symfony/Bundle/FrameworkBundle/Resources/views');
$rootTheme = realpath(__DIR__ . '/Symfony/Bundle/FrameworkBundle/Resources');
$templateNameParser = new StubTemplateNameParser($root, $rootTheme);
$loader = new FilesystemLoader(array());
$engine = new PhpEngine($templateNameParser, $loader);
/**
* This helper will help rendering form items
*/
/*$form_helper = new FormHelper($engine, array(
'FrameworkBundle:Form',
));*/
$form_helper = new FormHelper(new FormRendererInterface());
/**
* Bind it to the engine
*/
$engine->setHelpers(array(
$form_helper,
new TranslatorHelper(new Translator($locale, new MessageSelector())),
));
/**
* Bind submitted data
*/
$submitted = false;
$valid = null;
if (isset($_POST[$form->getName()])) {
$form->bind($_POST[$form->getName()]);
$submitted = true;
// validation
if ($valid = $form->isValid()) {
// you may want to redirect at this state
$data = $form->getData();
echo 'validated success';
var_dump($data);
}
}
/**
* Create the form view
*/
$form_view = $form->createView();
/**
* Now, it's time to render HTML!
*/
header('Content-type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html>
<body>
<form action="" method="post"
<?php print $form_helper->enctype($form_view) ?>
novalidate="novalidate">
<?php print $form_helper->widget($form_view) ?></div>
<input type="submit" />
</form>
<?php if ($submitted && $valid) : ?>
<p><strong>Submitted form is valid.</strong></p>
<?php endif; ?>
<p><em>Message object:</em></p>
<pre><?php print print_r($message, true); ?></pre>
</body>
</html>
난 당신이 인터페이스의 인스턴스를 위해 노력하고
Fatal error: Cannot instantiate interface Symfony\Component\Form\FormRendererInterface in /var/www/new/test.php on line 193
를? 오류 메시지가 있습니까? – Touki