1

ViciousAmateur:Default:Index Controller/action に関連するビューで、ページ分割された結果をフィルタリングするフォーム (KnpPaginatorBundle) を追加したいと考えています。コントローラーでフォームを作成し、フォーム変数でビューを返します。(ああ..フォームをビューに直接配置すると、期待どおりに機能します)。

/**
 * @Route("/{page}", defaults={"page" = 1}, name="homepage")
 * @Route("/")
 * @Template()
 */
public function indexAction(Request $request, $page)
{
    $filters = new Filters();
    $form = $this->createForm(new FiltersType(), $filters);
    if ($request->isMethod('POST')) {
        $form->bind($request);

        if ($form->isValid()) {
            // Do something with form submited data
        }
    }

    // Do something when index action loads, pagination etc...

    return $this->render('ViciousAmateurBundle:Default:index.html.twig', array(
        'form' => $form->createView(),
        'pagination' => $pagination
        )
    );
}

しかし、フォーム変数をそのビューに渡して(ビューを継承/分離するために)小枝インクルードにフォームを入れようとすると、うまくいきません。「エラー 101 (net::ERR_CONNECTION_RESET): Se ha restablecido la conexión.」という応答が返されます。(いくつかの単語はスペイン語です)それが私の見解です:

// file: ViciousAmateurBundle:Default:index.html.twig
{% extends '::base.html.twig' %}

{% block body %}
    {{ include('ViciousAmateurBundle:Default:filters.html.twig', {'form': form}) }}

    {% block filters %}
    {% endblock %}

    // Stuff in the body
{% endblock %}

ご覧のとおり、フォーム ビューは index から継承され ( extends 句)、コードをその "filters" twig ブロックに追加します...

// file: ViciousAmateurBundle:Default:filters.html.twig
{% extends 'ViciousAmateurBundle:default:index.html.twig' %}

{% block filters %}
<section class="filters">
    <form action="{{ path('homepage') }}" method="post" {{ form_enctype(form) }} class="filters">
        {{ form_errors(form) }}

            {{ form_errors(form.country) }}
            {{ form_widget(form.country, { 'attr': { 'placeholder': 'País', 'class': 'input-block-level' } }) }}

            // Some more form fields...

        {{ form_rest(form) }}

        <input type="submit" class="filters_submit btn btn-large btn-block" />
    </form>
</section>
{% endblock %}

そしたら… そんな事出来るの?フォームを継承されたビュー (インデックスからのフィルター ビュー) に配置するには、コントローラーによって指定されたフォーム変数を渡します。それは動作するはずですか?私が行方不明または間違っていることは何ですか? ありがとうございました

4

2 に答える 2

2

これは、Symfony2.1 の構文が次のとおりであるためです。

{% include "ViciousAmateurBundle:Default:filters.html.twig" with { form: form} %}

小枝インクルード機能

于 2013-02-10T11:22:08.170 に答える
1

私が行ったことは、extends句とtwigブロックをfilters.html.twigビューに削除することでした。そして、それをfilterstwigブロック内のindex.html.twigページに含めただけです。

index.html.twig

...
{% block filters %}
    {{ include('ViciousAmateurBundle:Default:filters.html.twig', {'form': form}) }}
{% endblock %}
...

filters.html.twig

<section id="filters">
<form action="{{ path('homepage') }}" method="post" {{ form_enctype(form) }} class="filters">
    {{ form_errors(form) }}

        {{ form_errors(form.country) }}
        {{ form_widget(form.country, { 'attr': { 'placeholder': 'País', 'class': 'input-block-level' } }) }}

        {{ form_errors(form.city) }}
        {{ form_widget(form.city, { 'attr': { 'placeholder': 'Ciudad', 'class': 'input-block-level' } }) }}

        {{ form_errors(form.gender) }}
        {{ form_widget(form.gender, { 'attr': { 'placeholder': 'Género', 'class': 'input-block-level' } }) }}

        {{ form_errors(form.sexual_orientation) }}
        {{ form_widget(form.sexual_orientation, { 'attr': { 'placeholder': 'Orientación sexual', 'class': 'input-block-level' } }) }}

    {{ form_rest(form) }}

    <input type="submit" id="toggleFilters1" class="filters_submit btn btn-large btn-block" value="Filtrar" />
</form>

于 2013-02-11T00:17:30.697 に答える