Install:
$ composer require keanor/php-datatablesExample, for users table:
- Create datatable class:
<?php/** * Created by PhpStorm. * User: keanor * Date: 17.02.17 * Time: 11:39 */namespaceAdministration\DataTable;
usePHPDataTables\AbstractDataTable;
/** * Class UserDataTable * * @package PHPDataTables\DataTables */class UserDataTable extends AbstractDataTable
{
/** * @return string */publicfunctiongetTableName(): string
{
return'users';
}
/** * Initialize table */publicfunctioninit()
{
$this->addColumn([
'name' => 'id',
'options' => [
'search_type' => 'exactly',
'label' => 'ID',
],
]);
$this->addColumn([
'name' => 'role',
'options' => [
'label' => 'Роль',
],
]);
$this->addColumn([
'name' => 'phone',
'options' => [
'search_type' => 'fulltext',
'label' => 'Телефон',
],
]);
$this->addColumn([
'name' => 'last_name',
'options' => [
'label' => 'Фамилия',
],
]);
$this->addColumn([
'name' => 'first_name',
'options' => [
'label' => 'Имя',
],
]);
$this->addColumn([
'name' => 'second_name',
'options' => [
'label' => 'Отчество',
],
]);
}
}- Inject DataTableView into page with table:
2.1) Create DataTable in controller:
// ...$adapter = newDoctrineDBAL($this->connection);
$usersDataTable = newUserDataTable($adapter);
$dataTableView = newDataTableView(
'#usersTable', // HTML ID Attribute'/administration/user/data', // ajax URL$usersDataTable,
[ // html tag <table> attributes'id' => 'usersTable',
'class' => 'table table-striped table-bordered',
'cellspacing' => '0',
'width' => '100%',
]
);
// ... invoke renderer or include view2.2) Invoke DataTableView in template
For native php:
// render tableecho$dataTableView->renderHtml();
// render jsecho'<script type="text/javascript">';
echo$dataTableView->renderJs();
echo'</script>';For twig:
{% blockcontent %}
{{ dataTableView.renderHtml() | raw }}
{% endblock %}
{% blockinline %}
<scripttype="text/javascript"> {{ dataTableView.renderJs() | raw }} </script>
{% endblock %}- Create data request handler
In controller:
$adapter = newDoctrineDBAL($this->connection);
$table = newUserDataTable($adapter);
$data = $table->getData($this->getRequest());
// echo json_encode($data);returnnewJsonModel($data);Propose pull requests!