2017-03-11 21 views
0

私はレストランに関するプロジェクトを持っています。 は、私はいくつかのフィールドを持つエンティティrestaurantを持っている、と私はそのフォームでレストランページを作成し、そのビュー(show.html.twig)でrestaurantを表示することができたら、別のエンティティに関連する外部キーがpeople値はデータベースに入りますが、ビューには表示されません - Symfony3

と呼ばれ、 how many people can eat there これは、この値を追加できる小さなフォームで新しいページを開くはずです。送信したら、レストランのページ(show.html.twig)にリダイレクトして、今入力した値を見てください。

にformType私は人々

class PeopleType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('value', NumberType::class, array(
       'label'    => 'How many people', 
       'required'   => false, 
      )) 
      ->add('save', SubmitType::class, array(
       'label'    => 'submit' 
      )); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => People::class, 
     )); 
    } 
} 

の数を追加するために作成したと私はその

class PeopleController extends Controller 
{ 
    public function PeopleAction(Request $request, Restaurant $restaurant) 
    { 
     $people = new People(); 
     $form = $this->createForm(PeopleType::class, $people); 
     $form->handleRequest($request); 

     if ($form->isSubmitted() && $form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($people); 
      $em->flush(); 

      return $this->redirectToRoute('admin_restaurant_show', array('id' => $restaurant->getId())); 
     } 

     return $this->render('admin/restaurant/people.html.twig', array(
      'restaurant' => $restaurant, 
      'form'   => $form->createView() 
     )); 
    } 
} 

と私は

を作成したルートの特定のコントローラを作成しました
admin_restaurant_people: 
    path: /{id}/people 
    defaults: { _controller: "AdminBundle:Retrocession:people" } 

私のレストランのビュー(show.html.twig)には、すでにレストランのレストランが追加されています。私は、ルートへのリンクが

<a href="{{ path('admin_restaurant_people', { 'id': restaurant.id }) }}">Add people</a> 

だから、一度にクリックしたとき、私は自分の価値を追加し、レストランページshow.html.twigにリダイレクトすることができますこのページで

enter image description here

を提出し、私の PeopleTypeフォームビューに行く持っています

そしてレストランビューで値を表示することができるように、私はそれを表示できるようにするには小枝のフィールドを追加

<p>People</p> 
     {% for value in restaurant.people.values %} 
      <p>{{ value }}</p> 
     {% endfor %} 

しかし、フォームに入力された値は表示されません。それはデータベースの中では正しいですが、ビュー自体は小枝でさえ私に見せてくれません。

は、ここで私は私がどこかで何かを逃したと思いますPeopleエンティティ

enter image description here

と私のデータベースです。問題を見つけるのを助けてくれますか?

ありがとうございました

+0

レストランと人の関係は何ですか?また、あなたのフォーム型では、フィールド 'value'を持っているようですが、テンプレートに' people.values'(additionnal s)を呼び出します。最後に、エラーはあなたが{{ダンプ(restaurant.people.values)}} ' – mickdev

+0

こんにちは中関係を@mickdev'どのように見えるか、それはだ見るためにあなたの価値をダンプする必要がありますので、文字列に配列を変換しようとしていると言います私のエンティティのレストランは 'oneToMany'はここに私のエンティティ' * @ORM \ OneToMany(targetEntity = "AppBundle \ Entity \ People"、mappedBy = "レストラン")のアノテーションです ' 'それで配列を与えると仮定します –

+0

また、symfonyオートコンプリートで' s'で値を取得すると、 'value'は実際には動作しません。だから私は '{{restaurant.people.values}}'が動作すると思う。 –

答えて

1

実際には、配列があります。問題を解決するには、forループのデータを表示することができます

{% for value in restaurant.people.values %} 
     {{ value }} 
{% endfor %} 

私はあなたが単一の値を期待していると思います。そのような場合は、エンティティの関係を調べて、なぜ配列を取得しているのか把握する必要があります。

{% set sum = 0 %} 

{% for value in restaurant.people.values[:1] %} 
     {% set sum = sum + value %} 
{% endfor %} 

は、少なくとも、上記の解決策は、あなたを抑制します:ここでは、最初の値のみを表示するに は、すべての値を合計したい場合は、あなたがいることをしようとスライス

{% for value in restaurant.people.values[:1] %} 
     {{ value }} 
{% endfor %} 

と醜い回避策ですエラー。

+0

あなたのメソッドは動作します! :)私は 'show.html.twig'で値を見ることができません。私は他の場所で何かを逃している、おそらくコントローラに?私のデータベースでは値段は上がっていますが、ビューでは何も表示されません。しかし、あなたのメソッドでエラーが消えてしまった –

+0

この質問に答えるには、PeopleとRestaurantの両方のエンティティマッピングを確認する必要があります。コントローラは値がデータベースにあるので動作するようです。 – mickdev

+0

内部の人々が* @ORM \ ManyToOne(targetEntity = "AppBundle \エンティティ\レストラン"、inversedByは= "retrocessions") * @ORM \ JoinColumn(名前= "restaurant_id"、referencedColumnNameと= "ID") 'とレストラン内entity'エンティティ '* @ORM \ OneToMany(targetEntity = "AppBundle \エンティティ\人"、mappedByは= "レストラン")' これらのアノテーション –

関連する問題