Update extending docs
This commit is contained in:
parent
e6205b7ee7
commit
180608ac1a
|
|
@ -163,6 +163,57 @@ Even if you don't want to use a different implementation, you may still find a r
|
||||||
// Pass the response to respond()
|
// Pass the response to respond()
|
||||||
$server->respond(null, $response);
|
$server->respond(null, $response);
|
||||||
|
|
||||||
|
Server Customization
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
As an alternative to passing you preferred request and response instances into ``Server::respond``, you can extend ``Server`` to obtain default values from a different source.
|
||||||
|
|
||||||
|
Classes such as ``Server`` that create dependencies as defaults keep the instantiation isolated in easy-to-override methods. For example, ``Server`` has a protected method ``getResponse`` that instantiates and returns a new response. You can easily replace this method with your own that returns the default response of your choice.
|
||||||
|
|
||||||
|
For example, imagine you have a dependency container that provides the starting messages for you. You can subclass ``Server`` to obtain and use these messages as defaults like this:
|
||||||
|
|
||||||
|
.. code-block:: php
|
||||||
|
|
||||||
|
class CustomerServer extends WellRESTed\Server
|
||||||
|
{
|
||||||
|
/** @var A dependency container */
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
$container,
|
||||||
|
array $attributes = null,
|
||||||
|
DispatcherInterface $dispatcher = null,
|
||||||
|
$pathVariablesAttributeName = null
|
||||||
|
) {
|
||||||
|
// Call the parent constructor with the expected parameters.
|
||||||
|
parent::__construct($attributes, $dispatcher, $pathVariablesAttributeName);
|
||||||
|
// Store the container.
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redefine this method, which is called in Server::respond when
|
||||||
|
* the caller does not provide a request.
|
||||||
|
*/
|
||||||
|
protected function getRequest()
|
||||||
|
{
|
||||||
|
// Return a request obtained from the container.
|
||||||
|
return $this->container["request"];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redefine this method, which is called in Server::respond when
|
||||||
|
* the caller does not provide a response.
|
||||||
|
*/
|
||||||
|
protected function getResponse()
|
||||||
|
{
|
||||||
|
// Return a response obtained from the container.
|
||||||
|
return $this->container["response"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
In addition to the messages, you can do similar customization for other ``Server`` dependencies such as the dispatcher (see above), the transmitter (which writes the response out to the client), and the routers that are created with ``Server::createRouter``. These dependencies are instantiated in isolated methods as with the request and response to make this sort of customization easy, and other classes such as ``Router`` use this pattern as well. See the source code, and don't hesitated to subclass.
|
||||||
|
|
||||||
.. _PSR-7: http://www.php-fig.org/psr/psr-7/
|
.. _PSR-7: http://www.php-fig.org/psr/psr-7/
|
||||||
.. _Using Middleware: middleware.html#using-middleware
|
.. _Using Middleware: middleware.html#using-middleware
|
||||||
.. _Request Attributes: messages.html#attributes
|
.. _Request Attributes: messages.html#attributes
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue