14

タイプ Vehicle の要素のリストがあり、これらの要素を Sonata Admin で表示します。これらの要素を「ステータス」フィールドでフィルタリングできますが、リストが表示されたときにアクティブな車両のみが表示され、誰かが非アクティブな車両を見たい場合は、フィルターを使用して非アクティブなステータスを選択する必要があります。Sonata Admin を使用して要素のリストにデフォルトでフィルタを適用する方法を誰かが知っているかどうか知りたいです。

これが私のコードです:

public function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->addIdentifier('name')
        ->add('status')
    ;
}

protected function configureDatagridFilters(DatagridMapper $mapper)
 {
     $mapper
         ->add('name')
         ->add('status')
     ;
 }

この目標を達成するために configureDatagridFilters() の status フィールドに追加できるオプションはありますか? その他のオプション?

前もって感謝します。

4

5 に答える 5

11

この方法も使用できます

    public function getFilterParameters()
    {
        $this->datagridValues = array_merge(
            array(
                'status' => array (
                    'type' => 1,
                    'value' => 0
                ),
                // exemple with date range
                'updatedAt' => array(
                    'type' => 1,
                    'value' => array(
                        'start' => array(
                            'day' => date('j'),
                            'month' => date('m'),
                            'year' => date('Y')
                            ),
                        'end' => array(
                            'day' => date('j'),
                            'month' => date('m'),
                            'year' => date('Y')
                            )
                        ),
                    )
                ),
            $this->datagridValues
            );

        return parent::getFilterParameters();
    }
于 2013-05-03T14:49:48.907 に答える
7

上記の両方の提案されたアプローチを使用すると、フィルターの「リセット」動作が中断されます。これは、フィルターが常にデフォルト値でフィルター処理されるようにするためです。私にとって、最善の方法は getFilterParameters 関数を使用して (値を静的に追加する代わりにロジックを追加できるため)、ユーザーが「リセット ボタン」をクリックしたかどうかを確認することだと思います。

/**
 * {@inheritdoc}
 */
public function getFilterParameters()
{
    // build the values array
    if ($this->hasRequest()) {
        $reset = $this->request->query->get('filters') === 'reset';

        if (!$reset) {
            $this->datagridValues = array_merge(array(
                'status' => array (
                    'type' => 1,
                    'value' => 0
                ),
            ),
                $this->datagridValues
            );
        }
    }

    return parent::getFilterParameters();
}
于 2016-05-19T13:54:57.887 に答える
1

もう 1 つの方法は、createQuery と getPersistentParameters を使用して非表示フィルターを適用することです。このアプローチは、完全にカスタマイズ可能なフィルターを使用するのに最適です。ここで私の記事を参照してください:

http://www.theodo.fr/blog/2016/09/sonata-for-symfony-hide-your-filters/

于 2016-09-30T14:24:11.857 に答える