1. Go to this page and download the library: Download data-dog/pager-bundle 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/ */
data-dog / pager-bundle example snippets
php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\QueryBuilder;
use DataDog\PagerBundle\Pagination;
class ProjectController extends Controller
{
/**
* Our filter handler function, which allows us to
* modify the query builder specifically for our filter option
*/
public function projectFilters(QueryBuilder $qb, $key, $val)
{
switch ($key) {
case 'p.name':
if ($val) {
$qb->andWhere($qb->expr()->like('p.name', ':name'));
$qb->setParameter('name', "%$val%");
}
break;
case 'p.hoursSpent':
switch ($val) {
case 'lessThan10':
$qb->andWhere($qb->expr()->lt('p.hoursSpent', 10));
break;
case 'upTo20':
$qb->andWhere($qb->expr()->lte('p.hoursSpent', 20));
break;
case 'moreThan2weeks':
$qb->andWhere($qb->expr()->gte('p.hoursSpent', 80));
break;
case 'overDeadline':
$qb->andWhere($qb->expr()->gt('p.hoursSpent', 'p.deadline'));
break;
}
break;
case 'l.code':
$qb->andWhere($qb->expr()->eq('l.code', ':code'));
$qb->setParameter('code', $val);
break;
default:
// Do not allow filtering by anything else
throw new \Exception("filter not allowed");
// You can also enable automatic filtering
//$paramName = preg_replace('/[^A-z]/', '_', $key);
//$qb->andWhere($qb->expr()->eq($key, ":$paramName"));
//$qb->setParameter($paramName, $val);
}
}
/**
* @Method("GET")
* @Template
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
$qb = $this->getDoctrine()->getManager()->getRepository("AppBundle:Project")
->createQueryBuilder('p')
->addSelect('l')
->innerJoin('p.language', 'l');
$options = [
'sorters' => ['l.code' => 'ASC'], // sorted by language code by default
'filters' => ['p.hoursSpent' => 'overDeadline'], // we can apply a filter option by default
'applyFilter' => [$this, 'projectFilters'], // custom filter handling
];
// our language filter options, the key will be used in where statemt by default
// and the value as title.
// The $filterAny key is a placeholder to skip the filter, so the any value could be ok.
$languages = [
Pagination::$filterAny => 'Any',
'php' => 'PHP',
'hs' => 'Haskell',
'go' => 'Golang',
];
// our spent time filter options, has specific keys so we know how to customize
$spentTimeGroups = [
Pagination::$filterAny => 'Any',
'lessThan10' => 'Less than 10h',
'upTo20' => 'Up to 20h',
'moreThan2weeks' => 'More than 2weeks',
'overDeadline' => 'Over deadline',
];
$projects = new Pagination($qb, $request, $options);
return compact('projects', 'languages', 'spentTimeGroups');
}
}
php
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Debug\Debug;
use DataDog\PagerBundle\Pagination;
$loader = rPage = 200;
ponse->send();
$kernel->terminate($request, $response);
php
namespace AppBundle\Twig;
use DataDog\PagerBundle\Twig\PaginationExtension as Base;
use DataDog\PagerBundle\Pagination;
class PaginationExtension extends Base
{
/**
* {@inheritdoc}
*/
public function getFunctions()
{
$defaults = [
'is_safe' => ['html'],
'needs_environment' => true,
];
$funcs = parent::getFunctions();
$funcs['filter_search_placeholder'] = new \Twig_Function_Method($this, 'filterSearchPlaceholder', $defaults);
return $funcs;
}
public function filterSearchPlaceholder(\Twig_Environment $twig, Pagination $pagination, $key, $placeholder)
{
$value = isset($pagination->query()['filters'][$key]) ? $pagination->query()['filters'][$key] : '';
return $twig->render('AppBundle::filters/search_placeholder.html.twig', compact('key', 'pagination', 'value', 'placeholder'));
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.