我正在Symfony 3.4中开发RPG游戏,我有一个NPCEntity数组通过控制器传递给树枝视图。我使用下面的代码来过滤一些关于NPC的数据: 显示比当前用户等级高 5 级的 NPC。
树枝视图:
{% for npc in npcs | filter(npc => npc.level < app.user.level+5) %}
<td>{{ npc.name }}</td>
<td>{{ npc.level }}</td>
但是,我必须为关卡系统创建单独的实体,并且我使NPC实体的$level属性ManyToOne由关卡实体的$npcs属性映射,该属性返回数组集合,现在我陷入了过滤视图中的数据。
级别实体:
namespace AppBundleEntity;
/**
* @ORMOneToMany(targetEntity="NPCType", mappedBy="level")
*/
private $npcs;
public function __construct()
{
$this->npcs = new ArrayCollection();
}
全国人大实体:
/**
* @ORMManyToOne(targetEntity="Level")
*/
private $level;
我的控制器:
class BattlesController extends Controller
{
/**
* @Route("/battles", name="battles")
*/
public function indexAction(Request $request)
{
$auth_checker = $this->get('security.authorization_checker');
if ($auth_checker->isGranted('IS_AUTHENTICATED_FULLY')) {
$npcs = $this->getDoctrine()
->getRepository('AppBundle:NPCType')
->findAll();
return $this->render('default/battles.html.twig', array('npcs' => $npcs));
} else {
return $this->redirectToRoute('fos_user_security_login');
}
}
}
其他人帮助我弄清楚了,我为我的实体制作了一个存储库,在那里我创建了一个函数来根据当前登录用户过滤 NPC 级别。
NPCTypeRepository:
namespace AppBundleRepository;
use DoctrineORMEntityRepository;
class NPCTypeRepository extends EntityRepository
{
public function findAllBetween($currentLevel, $limitLevel) {
$qb = $this->createQueryBuilder('n');
return $qb->andWhere($qb->expr()->between('n.level', $currentLevel, $limitLevel))
->getQuery()
->getResult();
}
}
更新了我的战斗控制器中的操作:
public function indexAction(Request $request)
{
$user = $this->getUser();
$npcs = $this->getDoctrine()
->getRepository(NPCType::class)->findAllBetween($user->getLevel(), $user->getLevel() + 5);
return $this->render('default/battles.html.twig', array('npcs' => $npcs));
}