2013-02-08 2 views
1

FormBuilder에서 개별 양식 필드 이름을 설정하는 방법이 있습니까?Symfony Form Class : 필드 이름 속성의 값의 이름을 변경하십시오.

정상적인 의미는 form_name[field_name]이고, form_name이 빈 문자열이면 field_name이됩니다.

지금 개별 필드 이름의 이름을 바꿀 수 있는지 묻고 싶습니다. 양식이 여전히 작동합니다. 이 같은 뭔가 :

첫 번째 필드 name="form_name[field_name]"
두 번째 필드 name="renamed_fildname"
세 번째 필드 name="form_name[field_name]"
등 ...

그래서이 가능합니까?

더 설명 : _username_password하지만 형태가 구축되지 않습니다 Default Symfony User Entity with Form Class
내가 기본 로그인 이름을 입력 필드 필요하다는 것을 알아 낸 :
이 내가 달성하기 위해 노력하고 있습니다 것입니다. 그러나 유효한 양식은 _token 필드가 필요합니다.

는 이제 폼에 이름을 추가 할 경우 :

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

그 것이다 그러나이 형태로 모든 이름 : _[field_names] 사용자 이름 및 암호 필드에 대한 토큰하지만 좋은 좋습니다. 그것의 필요는 과 _password이 될 필요가 있습니다. 실제로는 _[username]_[password]이 나에게 좋지 않습니다. 나에게 나쁜 신용 정보를 던져주는 Security Bundle도 좋지 않습니다.

답변

4

당신은 일을 복잡하게 만듭니다. 양식 양식은 로그인 양식에 쓸모가 없습니다. 양식 클래스는 엔티티를 사용할 때 좋은 유틸리티이지만 두 필드를 제출하여 로그인 확인에 전달하면됩니다. 따라서 엔티티를 업데이트하거나 생성하지 마십시오. 그러나 실제로 폼 클래스가 필요한 곳입니다.

는 문서 읽기 : 당신은 당신이 배우고 싶은 말했다 http://symfony.com/doc/current/book/forms.html#creating-form-classes


을하지만 당신은 그것을 잘못된 방법을 배웁니다. 그들은 여기서 조언을 드리며 http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form 간단한 형태의 나뭇 가지 서식 파일을 로그인 양식으로 사용할 수 있습니다.

product[description] 

양식이 처리되는 것을 표시하는 양식 필드입니다 :


실제로 양식 필드의 논리, 그 형태는 괄호 안의 물체와 이름 때문에 속성입니다 "제품"엔티티와 특정 필드 인 "설명"은 설명 텍스트를 입력하기를 원합니다.


사용 FOSUserBundle :https://github.com/FriendsOfSymfony/FOSUserBundle가 바퀴를 재발견하지 않습니다는)

+0

그래, 몇 가지 사항을 복잡하게 만든다는 것을 알고 있지만 나는 새로운 것을 배우는 방법과 한계가 무엇인지를 아는 유일한 방법입니다. 그리고 내가하려고하는 것이 불가능하다는 분명한 대답에 감사드립니다. – NaGeL182

+0

이 사용 사례에 대한 정답이라고 동의하지만 심포니에서이 작업을 수행 할 수 있어야하는 경우가 있습니다. 이 경우에는 {{form_row (form.name, { 'full_name': 'name'})}}을 사용할 수 있지만 나중에 양식에 요청을 바인딩 할 필요는 없습니다. 어떤 경우에는 데이터 모델을 관리하기 위해 angularJs로 작업 할 때 이것을 사용합니다. – Heyflynn

0

다른 것은 그냥 쉽게 예를 들어, 양식 이름으로 로그인 매개 변수를 구성 할 수 있다는 것입니다

username_parameter: "account_login[username]" 
password_parameter: "account_login[password]" 
csrf_parameter: "account_login[_token]" 
2

@mvrhov 당신이 당신의 사용자 지정 양식 유형과 일치하도록 방화벽의 매개 변수를 기본합니다 언급 한 바와 같이, 여기에이 방법을 보여줍니다 그 article greate입니다.

당신이 일치하도록 방화벽을 변경하여이 작업을 수행 할 :

security: 
firewalls: 
    my_firewall: 
     pattern: ^/ 
     form_login: 
      username_parameter: "form_name[username_field_name]" 
      password_parameter: "form_name[password_field_name]" 
      csrf_parameter: "form_name[_token]" 
      csrf_provider: form.csrf_provider 
      intention: authentication 

는 또한이 일치하도록 지정 양식의 setDefaultOptions을 변경 (intention은 위와 같이 동일) :

마지막으로
$resolver->setDefaults(array(
     'intention' => 'authentication' 
    )); 

이 양식의 이름 :

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