protected function prepareDemo11Grid() { $input = new InputSource($_GET); $grid = new Grid($provider = $this->getDataProvider(), [new TableCaption('Demo 11: Customization. Table Caption'), new Column('id'), new Column('name'), new Column('role'), new Column('birthday'), (new Column('age'))->setValueCalculator(function ($row) { return DateTime::createFromFormat('Y-m-d', $row->birthday)->diff(new DateTime('now'))->y; })->setValueFormatter(function ($val) { return "{$val} years"; }), (new Column('income'))->setValueFormatter(function ($value) { if (!class_exists('\\NumberFormatter')) { return '$' . $value; } static $numberFormatter; if ($numberFormatter === null) { $numberFormatter = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY); $numberFormatter->setPattern('<span style="color:green">¤</span>#,##0.00;-<span style="color:red">¤</span>#,##0.00'); } return $numberFormatter->format($value); }), new FilterControl('name', FilterOperation::OPERATOR_EQ, $input('name')), (new FilterControl('role', FilterOperation::OPERATOR_EQ, $input('role')))->setView(new TemplateView('select', ['options' => ['' => 'All Roles', 'User' => 'Users', 'Manager' => 'Managers', 'Admin' => 'Admins']])), new PageSizeSelectControl($input('ps', 10), [5, 10, 20, 50, 100]), new CsvExport($input('csv')), new ResetButton(), new PageTotalsRow(['id' => function () { return 'Page totals'; }, 'age' => PageTotalsRow::OPERATION_AVG, 'income' => PageTotalsRow::OPERATION_SUM]), new PaginationControl($input('page', 1), 10, $provider), new ColumnSortingControl('id', new InputOption('sort', $_GET)), new ColumnSortingControl('birthday', new InputOption('sort', $_GET))]); $grid->getTileRow()->detach()->attachTo($grid->getTableHeading()); $grid->attachTo($this->layout()); }