public function __invoke(Field $field) { if (!$field->isType('reference')) { throw new Exception('The FilterReferenceAsText template can only be used on DB reference fields.'); } $reference = $field->getOptionPairsReference(); $titleColumn = $field->getOptionPairs()->detectTitleColumn(); $field->assignHelperCallback('SelectFilter.FilterType', function () { return ['type' => 'text', 'options' => []]; })->assignHelperCallback('SelectFilter.SelectModifier', function ($helper, Select $select, $conditionSetName, $queryVars) use($reference, $titleColumn) { $filter = new TextFilter($reference['table'], $titleColumn); return $filter->apply($select, $conditionSetName, $queryVars); }); }