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); }); }
/** * Provide a default sorting strategy for reference columns. * * @param DbField $field * @param Select $select * @param string $direction * @return Select * @throws Select\SelectException */ public function sortDbReference(DbField $field, Select $select, $direction) { $optionPairs = $field->getOptionPairs(); $tableName = $optionPairs->getTableName(); try { $titleColumn = $optionPairs->detectTitleColumn(); } catch (TitleColumnNotDetectedException $e) { $titleColumn = $field->getName(); } if ($titleColumn instanceof Expr) { $orderSpec = "{$titleColumn} {$direction}"; } else { $orderSpec = new Expr("{$select->quoteWithAlias($tableName, $titleColumn)} {$direction}"); } return $select->order($orderSpec); }
/** * Use a \Dewdrop\Db\Field object to render the select tag. The OptionPairs * API will be used to retrieve the actual options allowed for this control. * * @param Field $field * @return string */ public function directField(Field $field) { return $this->directArray(array('name' => $field->getControlName(), 'id' => $field->getHtmlId(), 'options' => $field->getOptionPairs()->fetch(), 'value' => $field->getValue())); }
protected function handleDbReference(DbField $field, $type) { return function () use($field, $type) { return array('type' => $type, 'options' => array('options' => $field->getOptionPairs()->fetchJsonWrapper())); }; }