ResponseInterface.php

<?php

namespace Lia\Http;

/**
 * Event Handler signatures for handling all steps in `lia->deliver()`  (does NOT include ready() & finish() though)
 *
 * It is not necessary to implement this interface, but if you're implementing all the methods, it's a good idea.
 */
interface ResponseInterface {

    /**  
     * Before routes are retrieved, for setup or to modify $request & $response.
     *
     * @return void
     */
    public function onStartRequest(\Lia\Http\Request $request, \Lia\Http\Response $response);

    /**
     * Get one or multiple routes
     *
     * @return array <int index, \Lia\Http\Route $route> an array of routes (or array of one route) matching the request
     */
    public function onGetHttpRoutes(\Lia\Http\Request $request, \Lia\Http\Response $response): array;

    /** 
     * Modify $response, to show error, set redirect headers, or something else.
     *
     * @return void
     */
    public function onNoHttpRoutes(\Lia\Http\Request $request, \Lia\Http\Response $response);

    /** 
     * Modify $response to show content from one route, multiple routes, to show an error, to redirect, or something else.
     * 
     * @param $routes array<int index, \Lia\Http\Route $route> an array of Routes
     * @return void
     */
    public function onMultipleHttpRoutes(\Lia\Http\Request $request, \Lia\Http\Response $response, array $routes);

    /**
     * Modify $response to display $route.
     * 
     * @param $route \Lia\Http\Route 
     * @return void
     */
    public function onSingleHttpRoute(\Lia\Http\Request $request, \Lia\Http\Response $response, \Lia\Http\Route $route);


    /**
     * Modify $response->body depending on $response->theme_name
     * 
     * @param $request \Lia\Http\Request
     * @param $response \Lia\Http\Response
     * @param $routes array<int index, \Lia\Http\Route $route> an array of Routes. May be empty.
     * @return void
     */
    public function onApplyTheme(\Lia\Http\Request $request, \Lia\Http\Response $response, array $routes);

    /**
     * Response has been sent. 
     * Log the request/response/routes, cleanup caches, or do something else. 
     * 
     * @param $request \Lia\Http\Request
     * @param $response \Lia\Http\Response
     * @param $routes array<int index, \Lia\Http\Route $route> an array of Routes. May be empty.
     * @return void
     */
    public function onEndRequest(\Lia\Http\Request $request, \Lia\Http\Response $response, array $routes);

}