Sonata 管理包,操作对象

编程入门 行业动态 更新时间:2024-10-26 19:23:53
本文介绍了Sonata 管理包,操作对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有 2 个实体,它们具有一对多的关系项目和原型,并且我一直在寻找一种方法来在 show action 中列出属于一个项目的原型.这是我的项目实体:

I have 2 entities with one to many relationship project and prototype And I've been looking for a way to list the prototypes that belong to a project in the show action . here is my project entity:

<?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Projet * * @ORM\Table() * @ORM\Entity(repositoryClass="AppBundle\Entity\ProjetRepository") */ class Projet { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="nom", type="string", length=255) */ private $nom; /** * @var string * * @ORM\Column(name="description", type="string", length=255) */ private $description; /** * @var \DateTime * * @ORM\Column(name="dateCreation", type="date") */ private $dateCreation; /** * @ORM\OneToMany(targetEntity="AppBundle\Entity\Prototype", mappedBy="projet",cascade={"persist"} , orphanRemoval=true) * @ORM\OrderBy({"id"="ASC"}) */ protected $prototypes; public function __construct() { $this->prototypes = new \Doctrine\Common\Collections\ArrayCollection(); $this->dateCreation = new \DateTime("now"); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set nom * * @param string $nom * @return Projet */ public function setNom($nom) { $this->nom = $nom; return $this; } /** * Get nom * * @return string */ public function getNom() { return $this->nom; } public function __toString() { return $this->getNom(); } /** * Set description * * @param string $description * @return Projet */ public function setDescription($description) { $this->description = $description; return $this; } /** * Get description * * @return string */ public function getDescription() { return $this->description; } /** * Set dateCreation * * @param \DateTime $dateCreation * @return Projet */ public function setDateCreation($dateCreation) { $this->dateCreation = $dateCreation; return $this; } /** * Get dateCreation * * @return \DateTime */ public function getDateCreation() { return $this->dateCreation; } public function setPrototypes($prototypes) { if (count($prototypes) > 0) { foreach ($prototypes as $i) { $this->addPrototypes($i); } } return $this; } /** * Add prototypes * * @param \AppBundle\Entity\Prototype $prototypes * @return Projet */ public function addPrototypes(\AppBundle\Entity\Prototype $prototypes) { $this->prototypes[]= $prototypes; return $this; } public function addPrototype(\AppBundle\Entity\Prototype $prototype) { $prototype->setProjet($this); $this->prototypes->add($prototype); } /** * Remove prototypes * * @param \AppBunble\Entity\Prototype $prototypes */ public function removePrototypes(\AppBundle\Entity\Prototype $prototypes) { $this->prototypes->removeElement($prototypes); } /** * Get prototypes * * @return \Doctrine\Common\Collections\Collection */ public function getPrototypes() { return $this->prototypes; } }

这是我的原型实体

<?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Prototype * * @ORM\Table() * @ORM\Entity(repositoryClass="AppBundle\Entity\PrototypeRepository") */ class Prototype { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="nom", type="string", length=255) */ private $nom; /** * @var string * * @ORM\Column(name="description", type="string", length=255) */ private $description; /** * @var \DateTime * * @ORM\Column(name="dateCreation", type="date") */ private $dateCreation; /** * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Projet", inversedBy="prototypes") * @ORM\joinColumn(name="projet_id", referencedColumnName="id") */ private $projet; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Get nom * * @return string */ public function getNom() { return $this->nom; } public function __toString() { return $this->getNom(); } /** * Set nom * * @param string $nom * @return Prototype */ public function setNom($nom) { $this->nom = $nom; return $this; } /** * Set description * * @param string $description * @return Prototype */ public function setDescription($description) { $this->description = $description; return $this; } /** * Get description * * @return string */ public function getDescription() { return $this->description; } /** * Set dateCreation * * @param \DateTime $dateCreation * @return Prototype */ public function setDateCreation($dateCreation) { $this->dateCreation = $dateCreation; return $this; } /** * Get dateCreation * * @return \DateTime */ public function getDateCreation() { return $this->dateCreation; } /** * Set projet * * @param \AppBundle\Entity\Projet $projet * @return Prototype */ public function setProjet(\AppBundle\Entity\Projet $projet = null) { $this->projet = $projet; return $this; } /** * Get projet * * @return \AppBundle\Entity\Projet */ public function getProjet() { return $this->projet; } }

在我的 projetAdmin 中,我可以在 ShowAction 中显示原型:这是项目管理员:

In my projetAdmin I can show in the ShowAction the prototypes : here is projetAdmin :

<?php namespace AppBundle\Admin; use Sonata\AdminBundle\Admin\Admin; use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Form\FormMapper; use Sonata\AdminBundle\Show\ShowMapper; use Sonata\AdminBundle\Route\RouteCollection; class ProjetAdmin extends Admin { protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('nom', 'text', array('label' => 'Nom')) ->add('description','text',array('label'=>'Description')) ->add('dateCreation', 'date', array('label' => 'Date de création')) ; } protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ->add('nom') ->add('dateCreation') ; } protected function configureListFields(ListMapper $listMapper) { $listMapper ->add('nom') ->add('description') ->add('dateCreation') ->add('_action', 'actions', array( 'actions' => array( 'show' => array(), 'edit' => array(), 'delete' => array(), ) ) ) ; } protected function configureShowFields(ShowMapper $showMapper) { $showMapper ->add('prototypes') ; } }

我得到了原型(名字)

但我想列出"属于项目的原型,如列表视图(名称、原型描述...)

But I would like to "list" the prototypes that belong to the project like the list view ( name , description of the prototype...)

我该怎么做?

推荐答案

我找到了解决问题的方法,但我仍然觉得这不是更好的方法我创建了一个控制器并覆盖了 showAction

I found a way to resolve the problem but still I feel it's not the better way I created a controller and overrided the showAction

<?php namespace AppBundle\Controller; use Sonata\AdminBundle\Route\RouteCollection; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Sonata\AdminBundle\Controller\CRUDController as Controller; use Symfony\Component\HttpFoundation\RedirectResponse; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class CRUDController extends Controller { public function showAction($id = null) { return $this->redirect($this->generateUrl('admin_app_prototype_list', array( 'filter[projet__id][value]'=>$id ))); } }

然后我得到一个属于一个项目的原型列表.

Then I get a list of prototypes that belong to a project.

更多推荐

Sonata 管理包,操作对象

本文发布于:2023-10-11 17:45:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1482390.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象   操作   Sonata

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!