【问题标题】:Sonata Admin list custom query for ListMapper sonata_type_model field奏鸣曲管理员列表自定义查询 ListMapper sonata_type_model 字段
【发布时间】:2016-04-10 14:05:46
【问题描述】:

我尝试获取一些与我的所有 step 对象匹配的条目,但它们之间没有直接关系,因此我需要使用自定义查询。

我在我的管理课上试过了:

    protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->addIdentifier('texteEtape', null, array('label' => $this->getTranslator()->trans('label.step.text')));

    $this->addCountryListMap($listMapper);

    $listMapper
        ->addIdentifier('id')
        ->add('temperature')
        ->add('rincage', null, array('label' => $this->getTranslator()->trans('label.rinsing')))
        ->add('concentration')
        ->add('temps', null, array('label' => $this->getTranslator()->trans('label.time')))
        ->add('produit', null, array('label' => $this->getTranslator()->trans('label.product')))
        ->add('enabled', null, array('editable' => true))
        ->add('_action', 'actions', array(
            'actions' => array(
                'edit' => array(),
                'delete' => array()
            )
        ))
        ->add('updatedAt')
        ->add('Protocols','sonata_type_model', array('required' => true,
            'class'=> 'HypredMainBundle:Protocole','property'=> 'name',
            'query_builder' => $this->getProtocoles($listMapper->get('id'))));

getProtocoles 函数:

    private function getProtocoles($id) {
    $querybuilder = $this->getManager()->getRepository('HypredMainBundle:Etape')->getStepProtocoles($id);

    var_dump($querybuilder->getQuery()->getResult());
    die();

    return $querybuilder;
}

我也想知道如何传递当前实体 id(标识符返回一个 FieldDescription 对象)。

也许我错过了什么或什么,我希望我的帖子是全面的。

提前感谢您的宝贵时间。

【问题讨论】:

    标签: symfony sonata-admin


    【解决方案1】:

    我认为你尝试的方法行不通。

    我会尝试为 Protocols 属性定义一个自定义模板

    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('id')
            ->add('Protocols','string', array('template' => 'HypredMainBundle:Protocole:list_protocole.html.twig'))
        ;
    }
    

    在里面你会有对象和它的 id

    {{ object.id | protocols() }}
    

    我会写一个 Twig 扩展

    class AppExtension extends \Twig_Extension
    {
        protected $container;
    
        public function __constructor($container)
        {
            // remember to pass @service_container defining a twig extension service
            $this->container = $container;
        }
    
        public function getFilters()
        {
            return array(
                new \Twig_SimpleFilter('protocols', array($this, 'protocolsFilter')),
            );
        }
    
        public function ProtocolsFilter($id)
        {
            // content of getProtocoles() function from question
    
            $querybuilder = $this->container->get('doctrine')->getManager()->getRepository('HypredMainBundle:Etape')->getStepProtocoles($id);
            var_dump($querybuilder->getQuery()->getResult());
            die();
    
            return $querybuilder;
        }
    
        public function getName()
        {
            return 'app_extension';
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 2015-09-06
      • 2018-04-26
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多