PHP code example of flytachi / winter-mui-data-grid
1. Go to this page and download the library: Download flytachi/winter-mui-data-grid 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/ */
use Flytachi\Winter\K2\Http\Request\Validation\ListOf;
use Flytachi\Winter\K2\Http\Request\Validation\Valid;
use Flytachi\Winter\MuiDataGrid\Entity\MGFilterModel;
use Flytachi\Winter\MuiDataGrid\Entity\MGSortItem;
use Flytachi\Winter\MuiDataGrid\MuiGridRequest;
class ArticleGridRequest extends MuiGridRequest
{
public function __construct(
public ?int $authorId = null, // a domain filter of your own
int $page = 0,
int $pageSize = 20,
#[ListOf(MGSortItem::class)] array $sortModel = [],
#[Valid] MGFilterModel $filterModel = new MGFilterModel(),
) {
parent::__construct($page, $pageSize, $sortModel, $filterModel);
}
}
use Flytachi\Winter\Cdo\Qb;
use Flytachi\Winter\MuiDataGrid\MuiGrid;
use Flytachi\Winter\MuiDataGrid\MuiGridResponse;
use Flytachi\Winter\MuiDataGrid\Schema\FilterType;
use Flytachi\Winter\MuiDataGrid\Schema\GridColumn;
use Flytachi\Winter\MuiDataGrid\Schema\GridSchema;
class ArticleService
{
public function grid(ArticleGridRequest $request): MuiGridResponse
{
$repo = ArticleRepository::instance('a')
->select('a.id, a.title, a.views, a.created_at, au.name author_name')
->joinLeft(AuthorRepository::instance('au'), 'au.id = a.author_id')
->where(Qb::eq('a.is_published', true));
if ($request->authorId) {
$repo->andWhere(Qb::eq('a.author_id', $request->authorId));
}
$schema = GridSchema::make(
GridColumn::for('title', 'a.title')->filterable(FilterType::String)->sortable(),
GridColumn::for('views', 'a.views')->filterable(FilterType::Number)->sortable(),
GridColumn::for('authorName', 'au.name')->filterable(FilterType::String)->sortable(),
GridColumn::for('createdAt', 'a.created_at')->filterable(FilterType::Date)->sortable(),
)->defaultOrder('a.created_at DESC');
return MuiGrid::wrap($repo, $request, $schema);
}
}
#[PostMapping]
public function grid(
#[RequestJson, Valid] ArticleGridRequest $request
): ResponseEntity {
return ResponseEntity::ok(
$this->service->grid($request)->toArray()
);
}
// Entry point
MuiGrid::wrap(
RepositoryViewInterface $repo, // your pre-built query (SELECT/JOIN/base WHERE)
MuiGridRequest $request, // the grid request DTO
GridSchema $schema, // the filter/sort whitelist (
// Schema building blocks
GridColumn::for('muiField', 'sql.column')
->filterable(FilterType::String) // allow filtering, gate operators by type
->sortable() // allow sorting by sql.column
->sortable('lower(sql.column)') // ...or by a custom expression
->filterUsing(fn(MGFilterItem $i): ?Qb => …); // per-column operator override
GridSchema::make(GridColumn …)->defaultOrder('sql ASC');
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.