mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
39 lines
1.0 KiB
PHP
39 lines
1.0 KiB
PHP
<?php
|
|
namespace App\Filters;
|
|
|
|
trait FilterResolver
|
|
{
|
|
private function resolve($filterName, $values)
|
|
{
|
|
if($this->isCustomFilter($filterName)) {
|
|
return $this->resolveCustomFilter($filterName, $values);
|
|
}
|
|
|
|
$availableFilter = $this->availableFilters[$filterName] ?? $this->availableFilters['default'];
|
|
|
|
return app($availableFilter, ['filter' => $filterName, 'values' => $values]);
|
|
}
|
|
|
|
private function resolveCustomFilter($filterName, $values)
|
|
{
|
|
return $this->getClosure($this->makeCallable($filterName), $values);
|
|
}
|
|
|
|
private function makeCallable($filter)
|
|
{
|
|
return static::class.'@'.$filter;
|
|
}
|
|
|
|
private function isCustomFilter($filterName)
|
|
{
|
|
return method_exists($this, $filterName);
|
|
}
|
|
|
|
private function getClosure($callable, $values)
|
|
{
|
|
return function ($query, $nextFilter) use ($callable, $values) {
|
|
return app()->call($callable, ['query' => $nextFilter($query), 'value' => $values]);
|
|
};
|
|
}
|
|
}
|