Comments (4)
There is, but not the way you're doing it!
First off, all filters are configured via the filters
configuration key, which itself follows the semantics of a service manager: it has subkeys for services
, aliases
, invokables
, factories
, etc. You access filters via the Zend\Filter\FilterPluginManager
, which is stored as the service FilterManager
. In your example above, you'd do the following instead:
// This line:
$this->getServiceLocator()->get(PasswordCollectionFilter::class)
// becomes:
$this->getServiceLocator()->get('FilterManager')->get(PasswordCollectionFilter::class)
However, I don't recommend that! We have deprecated the usage of the ServiceLocatorAwareInterface
, and, if you upgrade to the latest zend-mvc versions, it's not available at all! There's a good reason for that: pulling dependencies from the service locator is a form of dependency hiding, and makes understanding the requirements for a class harder to determine, and harder to test.
Instead, update your resource class to instead accept the filter(s) you want via its constructor, and then update the factory for your resource class to inject it. This allows you then to use any configuration scheme you want. As an example, based on your examples above:
<?php
// Your resource class would accept a filter to the constructor:
use Zend\Filter\FilterInterface;
class SomeResource extends AbstractResource
{
private $filter;
public function __construct(FilterInterface $filter)
{
$this->filter = $filter;
}
/* ... */
public function fetchAll($criteria = [])
{
/** @var Paginator $paginator */
$paginator = parent::fetchAll($criteria);
$paginator->setFilter($this->filter);
return $paginator;
}
/* ... */
}
// Your factory would inject the filter:
use Zend\Filter\FilterChain;
class SomeResourceFactory
{
public function __invoke(ContainerInterface $container)
{
$config = $container->get('config');
$filters = $config['zf-rest'][Some\\Controller::class]['collection_filters'];
$chain = new FilterChain();
$chain->setPluginManager($container->get('FilterManager'));
array_walk($filters, function ($filter) use ($chain) {
$chain->attachByName($filter);
});
return new SomeResource($chain);
}
}
Originally posted by @weierophinney at zfcampus/zf-apigility#192 (comment)
from api-tools.
Is that means that currently Apigility haven't native support for filters injection into the resource-collection based on zf-rest configs?
I dont want to overwrite the method "fetchAll" every time ,
instead I want to place a array config with filters that I wan to be injected to the collection/paginator,
and to be able to leave the resource clean.
Originally posted by @karborator at zfcampus/zf-apigility#192 (comment)
from api-tools.
Is that means that currently Apigility haven't native support for filters injection into the resource-collection based on zf-rest configs?
Yes; this has never been supported, other than via the zf-doctrine-querybuilder-filter, which only works for Doctrine-connected services, and is highly specific to how the ORM supports querying data.
Additionally, your code $paginator->setFilter()
is non-standard; zend-paginator instances do not have filters, nor do our shipped Collection
classes.
My point is: you are talking about application-specific features. Apigility can accommodate these features, but you need to write such functionality yourself. One way you can accomplish it is to write your own base Resource
class that overrides fetchAll()
, your own base Collection
class that allows injection of a filter, and use either initializers or delegator factories to inject the filters into these resources.
Originally posted by @weierophinney at zfcampus/zf-apigility#192 (comment)
from api-tools.
https://github.com/zendframework/zend-paginator/blob/master/src/Paginator.php (486)
getItemsByPage ( 608 ) is using filters to filter the items
getIterator -> getCurrentItems -> getItemsByPage ( 608 )
Originally posted by @karborator at zfcampus/zf-apigility#192 (comment)
from api-tools.
Related Issues (20)
- Some suggestion on DELETE Method HOT 1
- Input Filter Behavior Option/Toggle HOT 4
- Db Connected Rest service empty response on http 200. HOT 11
- DB-Connected REST service should create fields automatically from DB schema HOT 3
- Enforcing scopes when accessing a resource HOT 2
- Pass $data in fetchAll() to the TableGatewayPaginator HOT 5
- Error when when rendering collections is disabled HOT 1
- Ability to support database/schema prefixed tables HOT 1
- Unable to add IsInstanceOfValidator in Admin UI HOT 1
- LAB API-REST : laminas-api-tools/statuslib-example : Installation failed, reverting ./composer.json to its original content HOT 6
- How do I create unit testing on laminas-api-tools ? HOT 2
- Psalm integration
- PHP 8.0 support
- php public/index.php returns base path error HOT 1
- Unable to edit previous created RPC services HOT 1
- Module(StatusLib) couldn't be initialized
- Switch to GHA CI workflow
- AbstractTableGateway defaults to use ArraySerializable which is deprecated
- PHP 8.1 support HOT 2
- PHP 8.3 support
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from api-tools.