1

フォームの作成に使用するコードは次のとおりです。

$form = $this->createFormBuilder($city)
            ->add('name', 'text')
            ->add('images', 'collection', array('type' => new ImageType())
            ->getForm();

都市のプロパティは、エンティティimagesのコレクションです。Image

ここでの定義はImageType

class ImageType extends AbstractType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder->add('path', new ImageFieldType());
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver) {
        $resolver->setDefaults(array('data_class' => 'My\Bundle\Entity\Image',));
    }

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

カスタムフィールドタイプのコードは次のImageFieldTypeとおりです。

class ImageFieldType extends AbstractType {
    public function getDefaultOptions(array $options) {
        return array('path' => null);
    }

    public function getParent() {
        return 'field';
    }

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

をレンダリングするImageFieldTypeには、次のブロックを使用します。

{% block imageField_widget %}
    {% if form.vars.value is not null %}
        <a href="{{ path('_cityManage') }}/CityID/ImageID">
        <img class="image_type" src="{{ asset('uploads/documents/' ~ form.vars.value) }}" />
        </a>
    {% endif %}
{% endblock %}

この小枝ブロックcity.idで電流を取得するにはどうすればよいですか? image.idで試してみまし{{ id }}たが、このプリントはform_image_0_path.

私の目標は、ページへのリンクを持つことですpath('_cityManage')/city.id/image.id

4

1 に答える 1

1

このような場合に私が行うこと (これが最善の方法かどうかはわかりませんが、うまくいきます):

あなたの場合、コントローラーでは、レンダリング関数を呼び出すときに必要な変数を渡します。

return $this->render('view', array(
    'form' => $form->createView(),
    'city' => $currentCity,
    'image' => $currentImage
);

テンプレートでこれらの変数を使用できるようになりました。

{{ city.id }}
{{ image.id }}

繰り返しますが、これが実際に最善の方法であるかどうかはわかりませんが、現時点では機能しており、他の方法は知りません...

于 2012-08-27T13:23:15.953 に答える