1. Go to this page and download the library: Download wedevelopnl/ux-table library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
namespace App\UXTable;
use Symfony\Component\Form\Extension\Core\Type\SearchType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use WeDevelop\UXTable\Table\AbstractTable;
final class ProjectsTable extends AbstractTable
{
public function getName(): string
{
return 'projects';
}
protected function buildFilterForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name', SearchType::class, [
'attr' => $this->stimulusSearchAttributes(),
'
#[Route('/projects', name: 'app_project_list')]
public function listAction(Request $request, ProjectsTable $projectsTable): Response
{
$projectsTable->process($request);
return $this->render(
'project/list.html.twig',
['projectsTable' => $projectsTable]
);
}
protected function configureOptions(OptionsResolver $resolver): void
{
parent::configureOptions($resolver);
$resolver->setDefaults([
'data_class' => \App\Entity\Project::class,
'hydrator' => function (array $project) {
return new \App\ReadModel\Project($project['id'], $project['name']);
},
'sortable_fields' => ['name'],
]);
}
final class ProjectsProvider implements DataProviderInterface
{
public function __construct(
private readonly ApiClient $api,
private readonly PaginatorInterface $paginator,
) {
}
public function search(
array $filters = [],
array $sort = [],
int $page = 1,
int $pageSize = 50,
array $options = []
): PaginationInterface {
$status = $options['status'];
$projects = $this->api->getProjects($status, $filters, $sort, $page, $pageSize);
return $this->paginator->paginate($projects, $page, $pageSize, [PaginatorInterface::PAGE_OUT_OF_RANGE => PaginatorInterface::PAGE_OUT_OF_RANGE_THROW_EXCEPTION]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver
->define('status')->allowedTypes(ProjectStatus::class)->