Program Tip

Form_rest ()가 Symfony2에서 필드를 표시하지 않도록하는 방법은 무엇입니까?

programtip 2020. 11. 12. 20:05
반응형

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

반응형