Почему я получаю & quot; Ошибка: вызов функции-члена end () для null & quot; используя Aerys?

Я пытаюсь поставить airys поверх моей cms, но получаю ошибку.
Как я вижу, бэкэнд возвращает не нулевое значение — # 1 в stacktrace, но не достигает $ resp-> end ().
Я застрял, пытаясь получить это значение до конца ().

Пример кода

$router = router()
->route("GET", "/exchangews", $websocket)
->route('*', '/{resource}/?', function (Aerys\Request $req, Aerys\Response $res, array $route) {

// copy params and make scalar the single values
$params = [];
foreach(($param = yield $req->getAllParams()) as $key => $val){
if(count($val)==1)$params[$key] = array_pop($val);
}
$headers = $req->getAllHeaders();

$bodyProm = Amp\call( function() use($params, $headers, $route){
try{
$lead = new RequestHandler($headers, array_merge($params, $route));
$body = $lead->proccess();
return $body;
}catch(\Exception $e){
//
}
});
$body = yield $bodyProm;
// run my application
$resp->end($body);

# matched by e.g. /user/rdlowrey/42
# but not by /user/bwoebi/foo (note the regex requiring digits)
# $res->end("The user with name {$route['name']} and id {$route['id']} has been requested!");
});

Трассировки стека:

    Error: Call to a member function end() on null in /Library/WebServer/Documents/ingine/index_aerys.php:47
Stack trace:
#0 [internal function]: {closure}(Object(Aerys\StandardRequest), Object(Aerys\StandardResponse), Array)
#1 /Library/WebServer/Documents/ingine/vendor/amphp/amp/lib/Coroutine.php(74): Generator->send('<!DOCTYPE html ...')
#2 /Library/WebServer/Documents/ingine/vendor/amphp/amp/lib/Success.php(33): Amp\Coroutine->Amp\{closure}(NULL, Array)
....

В чем дело?

0

Решение

Это кажется простой опечаткой. Вы определяете Aerys\Response $res в качестве параметра, но затем используйте $resp и попробуйте вызвать функцию, которая не определена. Вы должны включить отчеты об ошибках во время разработки. PHP должен выдать уведомление о неопределенной переменной там.

Кроме того, ваш Amp\call не нужно Вы можете просто написать это как:

try {
$lead = new RequestHandler($headers, array_merge($params, $route));
$body = yield $lead->proccess();
} catch(\Exception $e){
// handle error
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector