Form_rest ()가 Symfony2에서 필드를 표시하지 않도록하는 방법은 무엇입니까?
Symfony2를 사용하기 시작했지만 몇 가지 문제가 있습니다. 직접 필드를 렌더링하고 싶었지만 아직 렌더링 한 필드가 form_rest()
함수 와 함께 표시되기 때문에 작동하지 않습니다 . 따라서 두 개의 동일한 필드가 있습니다.
내 코드는 다음과 같습니다.
<div>
{{ form_errors(form.contenu) }}
<textarea id="{{ form.contenu.vars.id }}" name="{{ form.contenu.vars.full_name }}">{{ form.contenu.vars.value }}</textarea>
</div>
그리고 양식의 끝에 다음을 넣어야합니다.
{{ form_rest(form) }}
하지만 "contenu"필드가 표시됩니다.
문제가 무엇인지 알고 있습니까?
또 다른 옵션은 필드를 렌더링 된 것으로 명시 적으로 표시하는 것입니다.
{% do form.contenu.setRendered %}
내 생각에 덜 해키하지 않는 또 다른 방법은 다음과 같습니다.
{{ form_widget(form._token) }} // render the CSRF Token
{{ form_end(form, {'render_rest': false}) }} // do not render anything else
공식 문서 (v3.0) 에서 가져온 것이기 때문에 제가 생각하기에 가장 좋은 방법 입니다.
{{ form_rest(form) }}
각 필드를 "수동으로"렌더링 한 후 맨 끝에갑니다. CSRF 토큰에 사용하는 경우 항상 다음을 사용하여 렌더링 할 수 있습니다.
{# Token CSRF #}
{{ form_widget(form._token) }}
일부 필드를 표시하고 싶지 않은 상황은 잘못 설계된 형식을 제안합니다. __construct
조건부 (예 : 일부 필드 포함 / 제외 )로 만들기 위해 일부 인수를 입력 하거나 별도의 Form
클래스를 만들 수 있습니다 (제 생각에는 약간 과잉입니다).
몇 달 전에 사용자가 레코드를 삽입 / 업데이트 할 때 양식이 다른 일반적인 경우가있었습니다. 다음과 같았습니다.
...
public function __construct($isUpdateForm){
$this->isUpdateForm= $isUpdateForm;
}
public function buildForm(FormBuilder $builder, array $options){
....
$builder->add('some_filed', 'text', ..... );
if ( $this->isUpdateForm ){
$builder->add(.....);
}
....
}
....
어떤 이유로 폼 클래스를 리팩터링 할 수없는 경우에도 원하지 않는 필드를 표시 할 수 있지만 <div>
CSS display:none
속성이 있는 필드를 래핑 할 수 있습니다 . 이렇게하면 "그들은 여전히 거기에"(그리고 반드시 정상적으로 처리됨) 사용자에게는 보이지 않습니다.
도움이 되었기를 바랍니다...
참고 URL : https://stackoverflow.com/questions/10570002/how-to-make-form-rest-not-display-a-field-with-symfony2
'Program Tip' 카테고리의 다른 글
system.out.println ()을 찾을 수 없습니다. (0) | 2020.11.12 |
---|---|
자동으로 파일 변경을 감지하지 못함 (0) | 2020.11.12 |
Windows가 로컬 컴퓨터에서 Apache2를 시작할 수 없음-문제 (0) | 2020.11.12 |
비하인드 뷰 클릭 이벤트 프레임 레이아웃을 비활성화하는 방법 (0) | 2020.11.12 |
파이썬 목록 이해력; (0) | 2020.11.12 |