Symfony未定义变量(contexterror异常),当控制器中的数组为空时

时间:2017-07-12 09:44:59

标签: php symfony twig

这是事情。培训师可以说多种语言。我想在页面上显示一个或多个培训师的语言。请注意,我正在编写一个我从头开始的代码。

在我的控制器中:

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,
];

在我的twig文件中:

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

当此人链接到语言时,此方法有效,因此listLangues不为空。

否则我得

  

注意:未定义的变量:listLangues 500内部服务器错误 -   ContextErrorException

我也试过{% if listLangues is defined %},但系统似乎在控制器中阻塞了。它以前从未发生在我身上。

请注意,初始化$listLangues只会导致树枝页面无法显示。

有什么想法吗?

3 个答案:

答案 0 :(得分: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 %}     

希望,它会对你有帮助。

答案 1 :(得分:0)

您需要实例化$listLangue,因为如果没有培训师,则变量不存在且代码已损坏。

尝试在foreach之前添加:

$listLangues = null;

或者用一个值或你想要的东西来实例化它,但是在你的foreach之前声明它以确保它存在

答案 2 :(得分:0)

如果数组$trainers为空,则foreach nevers循环,以便永远不会定义$listLangues var。

尝试在foreach之前将其声明为空数组:

$listLangues = array();