无法正确利用带有 twig 的数组

问题描述 投票:0回答:2

我创建了一个实体,我想用它来保存“[此用户]接受/拒绝任务”等事件。到目前为止,我保存事件没有问题,但在任务视图中将其显示为列表时遇到问题

我创建了一个循环,以便日志表中的每一行都应显示与日志行的其余部分一起保存的任务 ID 是否与当前任务匹配

    $history = array();
    $log = $this->getDoctrine()->getRepository('MissionBundle:Log')->findAll();
    foreach($log as $l){
        if($h->getMission() === $mission->getId()){
            $history['user'] = $l->getUsername();
            $history['action'] = $l->getAction();
            $history['day'] = $l->getDay();
        }
    }

起初,我没有使用

$history['action'] = $l->getAction();
,而是尝试使用
array_push($history, $l->getUser(), $l->getAction(), $l->getDay());
,但我得到的结果是不可用的,因为我得到的树枝转储结果如下所示:

0 => "Isitech"
1 => "defined the mission as filled"
2 => DateTime {#1421 ▶}
3 => "Isitech"
4 => "defined the mission as declined"
5 => DateTime {#1426 ▶}

因此,使用我使用的

$history['user']
东西,我现在有以下树枝转储:

array:3 [▼
  "user" => "Isitech"
  "action" => "defined the mission as declined"
  "day" => DateTime {#1426 ▶}
]

我目前有两个问题:首先,我想创建一个循环,以便可以显示每个日志行,如下所示:

 {% for h in history %}
 {{ h.user }} {{ h.action }} on {{ h.day | date }}
 {{ endfor }}

对于未知的情况,通过这个循环以及它在树枝中的显示方式,我无法使用 {{ h.user }} 调用任何内容,而不会收到一条消息告诉我“用户不存在。此外,如果我这样做{ { dump(history) }},我得到(即)“isitech”而不是 [user] =>“Isitech”,所以我无法使用数据

此外,我的日志中目前有关于同一用户的两个条目,但我设法只有一个。

我想我错过了一些东西,但我找不到在哪里、如何以及为什么..

有什么想法吗?

php arrays loops symfony twig
2个回答
2
投票

您的 php 循环创建填充数组

$history
令人困惑。许多变量是我们未知的。

但是您可以使用学说的查询构建器来过滤日志实体。

$logsOfMission = $this->getDoctrine()->getRepository("MissionBundle:Log")
    ->createQueryBuilder('l') // I create the query builder
    ->where('l.missionId = :id') // Tell him I want only logs of the mission id 'id'
    ->setParameter('id', $myMissionObject->getId()) // I bind 'id' with the id of my mission object
    ->getQuery() // Give me my query doctrine please (the query object returned by doctrine)
    ->getResult() // Thanks :D (access to the attribute containing the query's result)
;

然后使用 twig 中的

$logsOfMission
数组代替历史数组。

您可以了解更多关于 Doctrine 和 Symfony

提供的可能性

编辑

再次阅读后,我认为您的代码中存在一些拼写错误。

基于此:

foreach($log as $l) {
    if($l->getMission() == $mission->getId()) {
        $history['user'] = $l->getUsername();
        // ...

您错过了为每行创建数组的过程

foreach($log as $l) {
    if($l->getMission() == $mission->getId())
        $history = array(
            'user' => $l->getUsername(),
            'action' => $l->getAction(),
            'day' => $l->getDay()
        );
    }
}

0
投票

实际上,我的循环走得太远了,这就是为什么我无法得到多个结果。

我没有按名称设置每列并希望我能获得现有日志数量的列时间,而是简单地重新创建了循环,如下所示:

$log = $this->getDoctrine()->getRepository('MissionBundle:Log')->findAll();
foreach($log as $l){
    if($l->getMission() === $mission->getId()){
            array_push($history, $l) 
            //So we're putting an array result directly in an other array
    }
}

通过这种方式,我现在可以使用 $history 在 'h' 上循环,并用 'h.day' 显示我想要的内容。感谢您的帮助,它帮助我找到了代码中的错误!

© www.soinside.com 2019 - 2024. All rights reserved.