2017-07-12 24 views
0

這是事情。培訓師可以對多種語言講零。我想在頁面上顯示一個或多個培訓師的語言。請注意,我正在研究一個我沒有從頭開始的代碼。當控制器中的數組爲空時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 s,因爲如果不存在培訓者,則該變量不能存在並且代碼被破壞。

嘗試在您的foreach之前補充一點:

$listLangues = null; 

或用一個值或你想要的實例化它,但你的foreach之前聲明它,以確保存在

+0

謝謝,您的回覆,但這就是我說我嘗試初始化時的意思。奇怪的是,頁面沒有顯示任何變量。沒有錯誤信息,但不是其他的! –

0

如果陣列$trainers是空的,foreach nevers循環,所以var不會被定義。

嘗試宣告它作爲一個空數組在foreach BEFORE:

+0

謝謝,但我已經嘗試過,與實例化$ listlangues相同的結果,沒有任何顯示! –

+0

@SandrineOciepka這是正常的行爲:你的'$ listLangues'沒有被定義,因爲'foreach'沒有循環。將它聲明爲一個空數組可以防止'Undefined variable'錯誤,它不會獲取任何數據。 有了一個有效的映射('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 %}  

希望,它會幫助你。

相關問題