Reader
In This Article
Using PSR-7 Clients
As noted in the previous section, you can substitute your own HTTP client by implementing the ClientInterface. In this section, we'll demonstrate doing so in order to use a client that is PSR-7-capable.
Responses
zend-feed provides a facility to assist with generating a
Zend\Feed\Reader\Response
from a PSR-7 ResponseInterface
via
Zend\Feed\Reader\Http\Psr7ResponseDecorator
. As such, if you have a
PSR-7-capable client, you can pass the response to this decorator, and
immediately return it from your custom client:
return new Psr7ResponseDecorator($psr7Response);
We'll do this with our PSR-7 client.
Guzzle
Guzzle is arguably the most popular HTTP client library for PHP, and fully supports PSR-7 since version 5. Let's install it:
$ composer require guzzlehttp/guzzle
We'll use the GuzzleHttp\Client
to make our requests to feeds.
Creating a client
From here, we'll create our client. To do this, we'll create a class that:
- implements
Zend\Feed\Reader\Http\ClientInterface
- accepts a
GuzzleHttp\ClientInterface
to its constructor - uses the Guzzle client to make the request
- returns a zend-feed response decorating the actual PSR-7 response
The code looks like this:
use GuzzleHttp\Client;
use GuzzleHttp\ClientInterface as GuzzleClientInterface;
use Zend\Feed\Reader\Http\ClientInterface as FeedReaderHttpClientInterface;
use Zend\Feed\Reader\Http\Psr7ResponseDecorator;
class GuzzleClient implements FeedReaderHttpClientInterface
{
/**
* @var GuzzleClientInterface
*/
private $client;
/**
* @param GuzzleClientInterface|null $client
*/
public function __construct(GuzzleClientInterface $client = null)
{
$this->client = $client ?: new Client();
}
/**
* {@inheritdoc}
*/
public function get($uri)
{
return new Psr7ResponseDecorator(
$this->client->request('GET', $uri)
);
}
}
Using the client
In order to use our new client, we need to tell Zend\Feed\Reader\Reader
about
it:
Zend\Feed\Reader\Reader::setHttpClient(new GuzzleClient());
From this point forward, this custom client will be used to retrieve feeds.
References
This chapter is based on a blog post by Stefan Gehrig.
Found a mistake or want to contribute to the documentation? Edit this page on GitHub!