2013-07-05 2 views
3

내가 Symfony2를 사용하는 배우고 및 심포니 양식이 비어있는 생성자, 또는 전혀이와 내가 읽은 문서에서, 모든 엔티티가 사용된다. (실시 예)는 I 하기 위해 생성자 매개 변수화 한 12
http://symfony.com/doc/current/cookbook/doctrine/registration_form.html
Symfony2 양식 - 양식 빌더에서 매개 변수화 생성자를 사용하는 방법

http://symfony.com/doc/current/book/index.html 장 생성시 특정 정보를 요구한다. Symfony의 접근법은 유효성 검사 프로세스를 철저히 준수하는 것으로 보입니다. 기본적으로 메타 데이터 어설 션 및 데이터베이스 제약 조건을 사용하여 객체가 제대로 초기화되었는지 확인하고 생성자 제약 조건을 유지하여 상태를 보장합니다.

고려 :

Class Employee { 
    private $id; 
    private $first; 
    private $last; 

    public function __construct($first, $last) 
    { .... } 
} 

... 
class DefaultController extends Controller 
{ 
    public function newAction(Request $request) 
    { 
     $employee = new Employee(); // Obviously not going to work, KABOOM! 

     $form = $this->createFormBuilder($employee) 
      ->add('last', 'text') 
      ->add('first', 'text') 
      ->add('save', 'submit') 
      ->getForm(); 

     return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
      'form' => $form->createView(), 
     )); 
    } 
} 

내가이 일을 생성자 인수를 사용하지할까요?

감사

편집 : 방법 나는 예에서 명확하지 않다 뭔가를 발견

컨트롤러에 대한 API에 보면 "의 CreateForm()" 해결책을 찾을 수

답변

5

아래의 답변 . 두 번째 인수는 반드시 대상이 아닌 것 같다 :

**Parameters** 
    string|FormTypeInterface  $type The built type of the form 
    mixed      $data The initial data for the form 
    array      $options Options for the form 

그래서 오히려 엔티티의 인스턴스로 전달보다 당신은 단순히 해당 필드의 값을 배열에 전달할 수 있습니다

$data = array(
    'first' => 'John', 
    'last' => 'Doe', 
); 
$form = $this->createFormBuilder($data) 
    ->add('first','text') 
    ->add('last', 'text') 
    ->getForm(); 

다른 옵션 (더 좋을 수도 있음)은 양식 클래스에서 기본 옵션으로 empty data set을 작성하는 것입니다. 설명 here이는 머리를 긁적 다른 사람을 저장 here

class EmployeeType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('first'); 
     $builder->add('last'); 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'empty_data' => new Employee('John', 'Doe'), 
     )); 
    } 
    //...... 
} 

class EmployeeFormController extends Controller 
{ 
    public function newAction(Request $request) 
    { 
     $form = $this->createForm(new EmployeeType()); 
    } 
    //......... 
} 

희망. 당신은 단순히 정적 문자열을 전달하면

+0

그것은 간단합니다. Employee의 생성자에 변수를 전달하는 방법은 무엇입니까? –