如何在sonataAdmin中的configureListfield中添加ManyToOne属性字段

时间:2014-02-17 09:16:02

标签: sonata-admin

我有一个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')


        ;
     }

}

3 个答案:

答案 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';
}