1. Go to this page and download the library: Download darxide-pl/cakephp-filter 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/ */
darxide-pl / cakephp-filter example snippets
namespace App\View;
use Cake\View\View;
class AppView extends View
{
public function initialize()
{
$this->loadHelper('Filter.FilterForm');
}
}
namespace App\Model\Table;
use Filter\FilterAwareTrait;
// rest of used classes and traits...
class UsersTable extends Table
{
use FilterAwareTrait;
// rest of code ...
}
namespace App\Model\Filter;
use Filter\Filter\BaseFilter;
use Cake\ORM\Query;
class UsersFilter extends BaseFilter
{
/**
* ! Used filter methods should be listed in this property - without this - filter will not be executed
* @var array
*/
protected $filters = [
'name',
'role'
];
/**
* By default, filter will look for variable $_GET[filter][name] or $_POST[filter][name] in this case
* @see Filter\Engine\RequestEngine::get()
*
*
* Notice: filter will be executed only if value is not "falsy":
* - not 0,
* - not empty string,
* - not null, etc
*
* @return Query
*/
public function name(Query $query, string $value) :Query
{
return $query
->where([
'Users.name LIKE' => '%'.$value.'%'
]);
}
/**
* Filter users list by role id
* @return Query
*/
public function role(Query $query, int $role_id) :Query
{
return $query->where(['Users.role_id' => $role_id]);
}
}
namespace App\Controller;
use App\Model\Filter\UsersFilter;
class PagesController extends AppController
{
public function display(...$path)
{
$this->loadModel('Users');
$query = $this
->Users
->find()
->setFilterClass(UsersFilter::class);
$results = $this->paginate($query);
$this->set(compact('results'));
$this
->viewBuilder()
->setTemplate('filter_example');
}
}
<?= $this->FilterForm->create('Users')
<?= $this->FilterForm->create('Users.Customers')
<?= $this->FilterForm->create('Users.Admins')
namespace App\Model\Filter;
use Filter\Filter\BaseFilter;
use Cake\ORM\Query;
class UsersFilter extends BaseFilter
{
protected $filters = ['name'];
public function name(Query $query, string $value) :Query
{
if($this->getSession()->read('Auth.User.role') !== 'admin') {
return $query;
}
return $query
->where([
'Users.name LIKE' => '%' . $value . '%'
]);
}
}
namespace App\Model\Filter;
use Filter\Filter\BaseFilter;
use Cake\ORM\Query;
class UsersFilter extends BaseFilter
{
protected $filters = ['name','lastname'];
public function name(Query $query, string $value) :Query
{
// we can access value of get.filter.lastname|post.filter.lastname here
$lastname = $this->get('lastname');
return $query
->where([
'Users.name LIKE' => '%' . $value . '%',
'Users.lastname LIKE' => '%' . $value . '%'
]);
}
public function lastname (Query $query, string $value) :Query {}
}
namespace App\Model\Filter;
use Filter\Filter\BaseFilter;
use Cake\ORM\Query;
class UsersFilter extends BaseFilter
{
protected $filters = ['name'];
public function name(Query $query, string $value) :Query
{
// We can load model like in controller
$this->loadModel('Roles');
$roles = $this->Users->find('list')->toArray();
return $query
->where([
'Users.name LIKE' => '%' . $value . '%',
'Users.role_id IN' => $roles
]);
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.