具有会话的过滤器中的默认值如何[Sonata Admin]

时间:2016-10-03 14:40:22

标签: php session symfony sonata-admin

我想为filterParameters

的默认值设置一个动态会话值

此代码有效:

/**
 * Default Datagrid values
 *
 * @var array
 */
protected $datagridValues = array(
    'applications' => array('value' => 'Sport TV'),
    '_sort_order' => 'ASC'
);

// Fields to be shown on filter forms
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('title')
        ->add('applications', null, array('label' => 'Chaîne'), null, array('expanded' => true, 'multiple' => true));
}

但是当我添加会话时,他不希望我在外面使用它 功能:

public function getApplicationsSession()
{
    $session = new Session();
    return $session->get('applications');
}

/**
 * Default Datagrid values
 *
 * @var array
 */
protected $datagridValues = array(
    'applications' => array('value' => $this->getApplicationsSession()),
    '_sort_order' => 'ASC'
);

我有这个错误:

Parse Error: syntax error, unexpected '$this' (T_VARIABLE)

感谢帮助我。

1 个答案:

答案 0 :(得分:1)

这部分代码是错误原因:

protected $datagridValues = array(
    'applications' => array('value' => $this->getApplicationsSession()),
                                         ^---- syntax error !
    '_sort_order' => 'ASC'
);
  

从对象上下文中调用方法时,伪变量$this可用。 $this是对调用对象的引用(通常是方法所属的对象... http://php.net/manual/en/language.oop5.basic.php

要解决此问题,您应该覆盖getFilterParameters()方法:

public function getFilterParameters()
{
    $this->datagridValues['applications']['value'] = $this->getApplicationsSession();

    return parent::getFilterParameters();
}