我有一个Fonctionnaire实体类,它包含了Grade实体类的ManyToOne属性。当我想将idGrade字段添加到FonctionnaireAdmin的ConfigureListField时(使用SonataAdmin)我收到此错误:
在呈现模板期间抛出异常(“您必须定义associated_property
选项或创建Proxies\__CG__\Examens\ExamensBundle\Entity\Grade::__toString
方法到字段选项idGrade来自服务examens.examens.admin.fonctionnaire是“)在SonataDoctrineORMAdminBundle:CRUD:list_orm_many_to_one.html.twig第19行。
Fontionnaire.php课程:
<?php
namespace Examens\ExamensBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Fonctionnaire
*/
class Fonctionnaire
{
//...//
/**
* @var \Examens\ExamensBundle\Entity\Grade
*/
private $idGrade;
//...//
}
FonctionnaireAdmin.php:
<?php
namespace Examens\ExamensBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Validator\ErrorElement;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Examens\ExamensBundle\Entity\Fonctionnaire;
class FonctionnaireAdmin extends Admin
{
protected $datagridValues = array(
'_sort_order' => 'ASC',
'_sort_by' => 'codeFonctionnaire'
);
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('nomAr','text',array('label'=>'Nom arabe'))
->add('prenomAr','text',array('label'=>'Prénom arabe'))
->add('nomFr','text',array('label'=>'Nom français '))
->add('prenomFr','text',array('label'=>'Prénom français'))
->add('nomUtilisateur','text',array('label'=>'nom Utilisateur'))
->add('motDePasse','text',array('label'=>'motDePasse'))
->add('idGrade','entity',
array('class' => 'Examens\ExamensBundle\Entity\Grade',
'property' => 'libGradeAr'))
->add('dateNominationGrade','date',
array('years' => range(1980, date('Y'))))
;
}
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->add('nomAr')
->add('prenomAr')
->add('nomFr')
->add('prenomFr')
->add('nomUtilisateur')
->add('motDePasse')
->add('idGrade')
->add('dateNominationGrade')
;
}
}
答案 0 :(得分:9)
你可以添加:
$('.mycart')
答案 1 :(得分:4)
您只需要在Grade类中添加__toString()方法即可。类似的东西:
public function __toString() {
return $this->nomAr;
}
SonataAdminBundle将使用它来显示当前对象的名称。
答案 2 :(得分:1)
不要忘记您也可以按照以下方式使用它来防止Sonata在创建新对象时为您生成名称:
public function __toString {
// Show name if it exist otherwise just show a custom label
return $this->nomAr ? $this->nomAr : 'Custom new label name';
}