newquery/symfony-entity-order

为您的实体添加一个名为 'positionOrder' 的新属性,以便您可以在排序集合中为项目指定位置

dev-main 2021-06-17 20:04 UTC

This package is auto-updated.

Last update: 2024-09-18 03:12:18 UTC


README

帮助从实体创建有序列表。

用法

将特性添加到所需的实体中

namespace App\Entity\Misc;  
  
use App\Repository\Misc\TeamMemberRepository;  
use Doctrine\Common\Collections\ArrayCollection;  
use Doctrine\Common\Collections\Collection;  
use Doctrine\ORM\Mapping as ORM;  
use newQuery\Bundle\EntityOrder\Lib\OrderEntity;  
use Symfony\Component\Validator\Constraints as Assert;  
  
/**  
 * @ORM\Entity(repositoryClass=TeamMemberRepository::class)  
 * @ORM\HasLifecycleCallbacks()  
 */
 class TeamMember  
{  
  
  use OrderEntity;  // THIS 
  
  /**  
  * @ORM\Id  
  * @ORM\GeneratedValue  
  * @ORM\Column(type="integer")  
  */  
  private $id;

请确保添加@ORM\HasLifecycleCallbacks()

享受吧,您的实体现在有了 positionOrder 属性。

创建一个动态控制器,用于增加/减少位置

/**
 * @Route("/increase/{className}/{id}", name="increase_position")
 */
public function increase(string $className, int $id, OrderPositionHelper $helper, Request $request): Response
{
    $em = $this->getDoctrine()->getManager();
    $meta = $em->getMetadataFactory()->getAllMetadata();

    $repository = null;
    foreach ($meta as $m) {
        if(strpos($m->getName(), 'App\Entity') !== false && strpos($m->getName(), $className) !== false) {
            $repository = $em->getRepository($m->getName());
            break;
        }
    }

    if(null !== $repository) {
        $result = $helper->increase($repository, $id);
        $this->getDoctrine()->getManager()->flush();

        if(true === $result) {
            $this->addFlash('success', 'Ordre mis à jour!');
        }
    }

    return $this->redirect($request->headers->get('referer'));
}
 /**
 * @Route("/decrease/{className}/{id}", name="decrease_position")
 */
public function decrease(string $className, int $id, OrderPositionHelper $helper, Request $request): Response
{
    $em = $this->getDoctrine()->getManager();
    $meta = $em->getMetadataFactory()->getAllMetadata();

    $repository = null;
    foreach ($meta as $m) {
        if(strpos($m->getName(), 'App\Entity') !== false && strpos($m->getName(), $className) !== false) {
            $repository = $em->getRepository($m->getName());
            break;
        }
    }

    if(null !== $repository) {
        $result = $helper->decrease($repository, $id);
        $this->getDoctrine()->getManager()->flush();

        if(true === $result) {
            $this->addFlash('success', 'Ordre mis à jour!');
        }
    }

    return $this->redirect($request->headers->get('referer'));
}

在 twig 模板中

<a class="btn btn-primary" href="{{ path('decrease_position', {'id': member.id, 'className': 'TeamMember'}) }}">-</a>
<a class="btn btn-primary" href="{{ path('increase_position', {'id': member.id, 'className': 'TeamMember'}) }}">+</a>

错误

您可以使用 特性 通过以下命令修复一个或所有实体的顺序: $ php bin/console nq:position-order:fix <?Entity>