目前我正在建立一个网上商店,我想在我的系统中管理产品。 问题是SonataAdmin不允许我编辑两个有关系的实体!
namespace Admin\IdManageBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* RFID
*
* @ORM\Table()
* @ORM\Entity
*/
class RFID
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Barcode", type="string", length=255)
*/
private $barcode;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set barcode
*
* @param string $barcode
*
* @return RFID
*/
public function setBarcode($barcode)
{
$this->barcode = $barcode;
return $this;
}
/**
* Get barcode
*
* @return string
*/
public function getBarcode()
{
return $this->barcode;
}
}
namespace Admin\StorageBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Product
*
* @ORM\Table()
* @ORM\Entity
*/
class Product
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Name", type="string", length=255)
*/
private $name;
/**
* @var float
*
* @ORM\Column(name="Price", type="float")
*/
private $price;
/**
* @ORM\OneToOne(targetEntity="Admin\IdManageBundle\Entity\RFID")
*/
private $rfid;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Product
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set price
*
* @param float $price
*
* @return Product
*/
public function setPrice($price)
{
$this->price = $price;
return $this;
}
/**
* Get price
*
* @return float
*/
public function getPrice()
{
return $this->price;
}
/**
* Set rfid
*
* @param \Admin\IdManageBundle\Entity\RFID $rfid
*
* @return Product
*/
public function setRfid(\Admin\IdManageBundle\Entity\RFID $rfid = null)
{
$this->rfid = $rfid;
return $this;
}
/**
* Get rfid
*
* @return \Admin\IdManageBundle\Entity\RFID
*/
public function getRfid()
{
return $this->rfid;
}
}
和“CellPhoneGlass”实体:
namespace Admin\StorageBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* CellPhoneGlass
*
* @ORM\Table()
* @ORM\Entity
*/
class CellPhoneGlass
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Phone", type="string", length=255)
*/
private $phone;
/**
* @var string
*
* @ORM\Column(name="Model", type="string", length=255)
*/
private $model;
/**
* @ORM\ManyToOne(targetEntity="Admin\StorageBundle\Entity\Product")
*/
private $product;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set phone
*
* @param string $phone
*
* @return CellPhoneGlass
*/
public function setPhone($phone)
{
$this->phone = $phone;
return $this;
}
/**
* Get phone
*
* @return string
*/
public function getPhone()
{
return $this->phone;
}
/**
* Set model
*
* @param string $model
*
* @return CellPhoneGlass
*/
public function setModel($model)
{
$this->model = $model;
return $this;
}
/**
* Get model
*
* @return string
*/
public function getModel()
{
return $this->model;
}
/**
* Set product
*
* @param \Admin\StorageBundle\Entity\Product $product
*
* @return CellPhoneGlass
*/
public function setProduct(\Admin\StorageBundle\Entity\Product $product = null)
{
$this->product = $product;
return $this;
}
/**
* Get product
*
* @return \Admin\StorageBundle\Entity\Product
*/
public function getProduct()
{
return $this->product;
}
}
Sonata不会显示带有“sonata_model_type”的产品实体。 这是Admin类:
namespace Admin\StorageBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Show\ShowMapper;
class CellPhoneGlassAdmin extends Admin
{
/**
* @param DatagridMapper $datagridMapper
*/
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->tab("Product")
->with("")
->add('product', 'sonata_type_model', array(
'class' => 'Admin\StorageBundle\Entity\Product',
'property' => 'name',
'by_reference' => false,
))
->end()
->end()
->tab("Glass")
->with("")
->add('phone')
->add('model')
->end()
->end()
;
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->tab("Product")
->with("")
->add('product', 'sonata_type_model', array(
'class' => 'Admin\StorageBundle\Entity\Product',
'property' => 'name',
'by_reference' => false,
))
->end()
->end()
->tab("Glass")
->with("")
->add('phone')
->add('model')
->end()
->end()
;
}
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->tab("Product")
->with("")
->add('product', 'sonata_type_model', array(
'class' => 'Admin\StorageBundle\Entity\Product',
'property' => 'name',
'by_reference' => false,
))
->end()
->end()
->tab("Glass")
->with("")
->add('phone')
->add('model')
->end()
->end()
;
}
/**
* @param ShowMapper $showMapper
*/
protected function configureShowFields(ShowMapper $showMapper)
{
$showMapper
->tab("Product")
->with("Content")
->add('product', 'sonata_type_model', array(
'class' => 'Admin\StorageBundle\Entity\Product',
'property' => 'name',
'by_reference' => false,
))
->end()
->end()
->tab("Glass")
->with("Content")
->add('phone')
->add('model')
->end()
->end()
;
}
}
答案 0 :(得分:0)
不确定我是否正确理解了您想要的内容,我假设您要从CellPhoneGlass表单中添加新产品。
你必须使用sonata_type_model_list这样做,sonata_type_model只允许选择现有的实体:
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->tab("Product")
->with("")
->add('product', 'sonata_type_model_list')
->end()
->end()
->tab("Glass")
->with("")
->add('phone')
->add('model')
->end()
->end()
;
}