2013-09-04 2 views
0

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

+0

를? 오류 메시지가 있습니까? – Touki

답변

2

이 오류가 무엇입니까 :

$form_helper = new FormHelper(new FormRendererInterface()); 

인터페이스하는 클래스 및 없습니다 인스턴스화 할 수 없습니다 (http://php.net/interface 참조).

체크 아웃 형태의 구성 요소 독립형 사용의 예 : 문제가 정확히 무엇 https://github.com/bschussek/standalone-forms

+0

안녕 야쿱 Zalas, 답장을 보내 주셔서 감사하지만 그것은 작동하지 않습니다 그것은 오류를 치명적인 오류를주는 심포니 2.1 다음입니다 : 클래스 '심포니 \ 구성 요소 \ 양식 \ 확장 \ CSRF \ CsrfProvider \ DefaultCsrfProvider'을 (를) 찾을 수 없습니다 in /Library/WebServer/Documents/eeee/src/setup.php on line 26 – Ganesh

+0

안녕하세요, 어느 누구든지이 문제에 대한 업데이트가 있습니까? 님께 서 오류가 발생했습니다. ** 'Symfony \ Component \ Form \ Exception \ LogicException'오류가 발생했습니다. '다음과 같은 블록이 존재하지 않으므로 양식을 렌더링 할 수 없습니다 :'_message_enctype ',' message_enctype ","form_enctype "** – Ganesh

+0

방금 ​​bschussek/standaolne-forms를 시도하고 작동합니다 (repo를 복제하고 설치 프로그램을 실행하십시오 - 설치가 아니라 업데이트). 2.1 버전을 기반으로하므로 최신 버전으로 업데이트하는 방법을 찾아야합니다. –

관련 문제