programing

symfony2를 사용하여 form_rest()가 필드를 표시하지 않도록 하려면 어떻게 해야 합니까?

bestcode 2022. 9. 22. 00:29
반응형

symfony2를 사용하여 form_rest()가 필드를 표시하지 않도록 하려면 어떻게 해야 합니까?

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

반응형