PHP code example of hibit-dev / criteria

1. Go to this page and download the library: Download hibit-dev/criteria 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/ */

    

hibit-dev / criteria example snippets


use Hibit\Criteria;
use Hibit\CriteriaPagination;
use Hibit\CriteriaSort;
 
final readonly class UserSearchCriteria extends Criteria
{
    public ?string $name;
    public ?string $email;
 
    public static function create(
        CriteriaPagination $pagination,
        CriteriaSort $sort,
        ?string $name = null,
        ?string $email = null,
    ): UserSearchCriteria {
        $criteria = new self($pagination, $sort);
 
        $criteria->name = $name;
        $criteria->email = $email;
 
        return $criteria;
    }
}

// Default Pagination: limit=10, offset=0
CriteriaPagination::create()

// Pagination: limit=10 (default), offset=10
CriteriaPagination::create(null, 10)

// Pagination: limit=20, offset=0 (default)
CriteriaPagination::create(20)

// Pagination: limit=20, offset=20
CriteriaPagination::create(20, 20)

// Sorting: created_at DESC (default)
CriteriaSort::create('created_at')

// Sorting: created_at ASC
CriteriaSort::create('created_at', CriteriaSortDirection::ASC)
 
// Sorting: name DESC
CriteriaSort::create('name', CriteriaSortDirection::DESC)

use Hibit\CriteriaPagination;
use Hibit\CriteriaSort;
use Hibit\CriteriaSortDirection;
 
class UserRepository
{
    public function searchByCriteria(UserSearchCriteria $criteria): array
    {
        // Start query builder to apply filtering
 
        if ($criteria->name !== null) {
            // Apply name filter: $criteria->name
        }
 
        if ($criteria->email !== null) {
            // Apply email filter: $criteria->email
        }
 
        if ($criteria->pagination !== null) {
            // Apply limit: $criteria->pagination->limit
            // Apply offset: $criteria->pagination->offset
        }
 
        if ($criteria->sort) {
            // Apply sorting field: $criteria->sort->field->value()
            // Apply sorting direction: $criteria->sort->direction->value()
        }
 
        // Execute the query and return the results
    }
}

use Hibit\CriteriaPagination;
use Hibit\CriteriaSort;
use Hibit\CriteriaSortDirection;
 
class CriteriaTestClass
{
    public function __invoke(UserRepository $userRepository): array
    {
        return $userRepository->searchByCriteria(
            UserSearchCriteria::create(
                CriteriaPagination::create(), // Default pagination
                CriteriaSort::create('created_at', CriteriaSortDirection::DESC),
                'John'
            )
        );
    }
}