avz-cmf / zaboy-rest

0 stars 1 forks source link

zaboy\rest\Middleware\ResponseEncoder #6

Closed victorynox closed 8 years ago

victorynox commented 8 years ago
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
    {
        $responseBody = $request->getAttribute('Response-Body');       
        $accept = $request->getHeaderLine('Accept');
        if (isset($accept) && preg_match('#^application/([^+\s]+\+)?json#', $accept)) {
            $status = $response->getStatusCode();
            $headers = $response->getHeaders();
            $response = new JsonResponse($responseBody, $status, $headers);
        }else{

           $result = '';
            switch (true) {
                case gettype($responseBody) == 'array' :
                    foreach ($responseBody as $valueArray) {
                        $result = $result . ' - ';
                        if(is_array($valueArray)){
                            foreach ($valueArray as $key => $value) {
                                $result = $result . $key . ' - ' . $value . '; _   _  ';
                            }
                            $result = $result .  '<br>' . PHP_EOL;
                        }else{
                            $result = $valueArray .  '<br>' . PHP_EOL;
                        }

                    }  
                    break;
                case is_numeric($responseBody) or is_string($responseBody) :
                    $result = $responseBody .  '<br>' . PHP_EOL;
                    break;
                case is_bool($responseBody) :
                    $result = $responseBody ?  'TRUE' : 'FALSE';
                    $result = $result .  '<br>' . PHP_EOL;                    
                    break;                
                default:
                    throw new \zaboy\rest\RestException(
                       '$responseBody must be array, numeric or bool. But'
                       . gettype($responseBody) . ' given.'
                    );
            }

            $response->getBody()->write($result);
        }

        if ($next) {
            return $next($request, $response);
        }

        return $response;      
    }

Добавить проверку на то что элемент внутри массива массив Записывать результат в response через метод write()

avz-cmf commented 8 years ago

done