2017-07-12 12 views
0

ここには事があります。トレーナーは、ゼロから複数の言語を話すことができます。 1つまたは複数のトレーナーの言語をページに表示したい私が最初から始めなかったコードに取り組んでいることに注意してください。私のコントローラでsymfonyコントローラーで配列が空の場合の未定義変数(contexterror例外)

:私の小枝ファイルで

foreach ($trainers as $trainer){ 
$trainer_entity = $doctrine->getRepository('AppBundle:Trainer')->find($trainer["id"]); 

$listLangues = $this->getDoctrine() 
->getManager() 
->getRepository('AppBundle:TrainerLangues') 
->findByTrainer_id($trainer["id"]); 
} 
return [ 
'user' => $user, 
'listLangues' => $listLangues, 
'trainers' => $trainers, 
]; 

{% if listLangues %} 
<b>Langues</b> : 
{% for l in listLangues %} 
     {{ l.langue.name }} 
      {% endfor %} 
     {% endif %} 

listLangues空ではないので、人は、言語にリンクされているとき、これは動作します。未定義の変数::私は

お知らせ得る

は、そうでない場合listLangues 500内部サーバーエラー - ContextErrorException

を私も{% if listLangues is defined %}を試してみましたが、システムは、コントローラにブロックするように思えます。それは以前私に起こったことはありませんでした。

初期化すると、$listLanguesは、小枝ページには表示されません。

答えて

0

$listLangueをインスタンス化する必要があります。なぜなら、トレーナーがいなければ、変数は存在せず、コードが壊れてしまうからです。

あなたのforeachの前にこれを追加してください:

$listLangues = null; 

または値か、何をしたいとそれをインスタンス化しますが、あなたの配列$trainersが空の場合はそれが

+0

お返事ありがとうございますが、それは私がそれを初期化しようとしたときの意味です。奇妙なことに、ページには変数が表示されません。エラーメッセージは表示されませんが、残りの部分は表示されません。 –

0

が存在することを確認するため、あなたのforeachの前にそれを宣言foreach neversはループするので、$listLangues varは定義されません。

foreachの前に空の配列として宣言してみてください。

+0

ありがとうございましたが、私は$ listlanguesのインスタンス化と同じ結果を既に試しましたが、何も表示されません! –

+0

@SandrineOciepkaこれは正常な動作です:あなたの '$ listLangues'は、' foreach'がループしていないために定義されていませんでした。空の配列として宣言すると、「未定義の変数」エラーが発生しないため、データをフェッチしません。 有効なマッピング( 'Trainer'と' TrainerLangue'間の多対多の関係)では、scoolnicoによる答えはあなたが望むようにするべきです – Cyro

1

あなたが本当にあなたのビューで表示するものをしたいですか?

はここで簡単なヒントで、あなたのコントローラに試みることができる:

/***/ 
public function yourAction() 
{ 
    return $this->render('your-template.html.twig', [ 
     'user' => $this->getUser(), 
     'trainers' => $this->getDoctrine()->getRepository(Trainer::class)->findAll() 
    ]); 
} 
/***/ 

次に、あなたのビューに(基本的な実装)

{% for trainer in trainers %} 
    <h4>{{ trainer.name }}</h4> 
    {% if trainer.languages %} 
    <ul> 
     {% for language in trainer.languages %} 
      <li>{{ language.name }}</li> 
     {% endfor %} 
    </ul> 
    {% endif %} 
{% endfor %}  

希望、それはあなたを助けるでしょう。

関連する問題