2014-02-28 1 views
0

양식 유형 을 만듭니다. UserBundle/form/UserType.php.

$form->isValid()은 다른 필드가 비어 있어도 사용자 이름이나 전자 메일이 존재하면 true를 반환합니다.

class UserType extends AbstractType 
{ 
    private $type; 
    const TYPE_CREATE = 1; 

    public function __construct($type) { 
     $this->type = $type; 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     switch ($this->type){ 
      case self::TYPE_CREATE : 
       $builder 
        ->add('email', 'email', array('label' => 'user.email')) 
        ->add('username', null, array('label' => 'user.name')) 
        ; 
       break; 
      default : 
       $builder 
        ->add('username') 
        ->add('usernameCanonical') 
        ->add('email') 
        ->add('emailCanonical') 
        ->add('enabled') 
        ->add('salt') 
        ->add('password') 
        ->add('lastLogin') 
        ->add('locked') 
        ->add('expired') 
        ->add('expiresAt') 
        ->add('confirmationToken') 
        ->add('passwordRequestedAt') 
        ->add('roles') 
        ->add('credentialsExpired') 
        ->add('credentialsExpireAt') 
       ; 
       break; 
     } 

    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Project\UserBundle\Entity\User' 
     )); 
    } 

    public function getName() 
    { 
     return 'project_userbundle_user'; 
    } 
} 

그리고 내 컨트롤러는

class UserController extends Controller 
{ 
    public function CreateAction() 
    { 
     //create user 
     $userManager = $this->get('fos_user.user_manager'); 
     $user = $userManager->createUser(); 

     //create form 
     $form = $this->createForm(new UserType(UserType::TYPE_CREATE),$user); 

     //form submit 
     $request = Request::createFromGlobals(); 
     if($request->getMethod() === "POST"){ 
      $form->submit($request); 
      //test if form is valid 
      if($form->isValid()){ 
       //generate random password 
       $password = User::randomPassword(); 
       $user->setPassword($password); 

       //save user 
       $userManager->updateUser($user); 
      } 
     } 

     return $this->render('Project:User:create.html.twig',array(
      'form' => $form->createView() 
     )); 
    } 
} 
+1

왜 요청 개체를 다시 작성 하시겠습니까 ??? 메소드 매개 변수에서 그것을 묻는 것이 잘못된 이유는 무엇입니까? 또는'$ this-> getRequest()'에서 가져 오는 것인가? 또는'$ this-> get ('request')'에서 가져 오는 것인가? – Touki

+0

어디있는 $ form-> handleRequest ($ request) –

답변

2

팁 : 당신은 컨트롤러 내부에 다시 ​​만들 Request에해서는 안되는

. 확실히 나쁜 습관이며 현재 발생하고있는 응용 프로그램의 바람직하지 않은 동작으로 이어질 수 있습니다.

public function createAction(Request $request) 
{ 
    // $request is holding the current request 
} 

은 또한 당신이 컨트롤러와 같은 ContainerAware 클래스 내부의 컨테이너에서 현재 요청을 얻을 수 있습니다 : 당신이 방법은 매개 변수로 추가하는 경우

심포니는 컨트롤러 액션에 자동으로 요청을 전달합니다.

$request = $this->getRequest(); 
$request = $this->get('request'); 
$request = $this->container->get('request'); 

는 또한 symfony coding standards 고수하십시오. 코드에 여러 위반이 있습니다.

메소드 이름은 이어야합니다. 낙타 사례입니다. 낙타는입니다.

UserBundle/formUserBundle/Form이어야합니다.

메소드의 중괄호/중괄호는 다음 행에 속합니다.

public function __construct($type) // { 
{ 
    $this->type = $type; 
} 
관련 문제