'Call to undefined method Zend\Diactoros\Response::write' [conflict with php-http/discovery:^1.6]
saippuakauppias opened this issue · 4 comments
Hello!
I use sentry/sdk
for catch all exceptions from site, base package sentry/sentry
require php-http/discovery: ^1.6.1
. But with this package I get error like: Call to undefined method Zend\Diactoros\Response::write()
. Traceback:
#0 /Users/sks/Sites/slim-basic-auth/vendor/tuupola/slim-basic-auth/src/HttpBasicAuthentication.php(211): {closure}(Object(Zend\Diactoros\Response), Array)
#1 /Users/sks/Sites/slim-basic-auth/vendor/tuupola/slim-basic-auth/src/HttpBasicAuthentication.php(144): Tuupola\Middleware\HttpBasicAuthentication->processError(Object(Zend\Diactoros\Response), Array)
#2 /Users/sks/Sites/slim-basic-auth/vendor/tuupola/callable-handler/src/DoublePassTrait.php(47): Tuupola\Middleware\HttpBasicAuthentication->process(Object(Slim\Http\Request), Object(Tuupola\Middleware\CallableHandler))
#3 [internal function]: Tuupola\Middleware\HttpBasicAuthentication->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#4 /Users/sks/Sites/slim-basic-auth/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Tuupola\Middleware\HttpBasicAuthentication), Array)
#5 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#6 /Users/sks/Sites/slim-basic-auth/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#7 /Users/sks/Sites/slim-basic-auth/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#8 /Users/sks/Sites/slim-basic-auth/vendor/slim/slim/Slim/App.php(406): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#9 /Users/sks/Sites/slim-basic-auth/vendor/slim/slim/Slim/App.php(314): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))
#10 /Users/sks/Sites/slim-basic-auth/index.php(30): Slim\App->run()
#11 /Users/sks/.composer/vendor/laravel/valet/server.php(158): require('/Users/sks/Site...')
#12 {main}
Reproduce
composer.json:
{
"require": {
"tuupola/slim-basic-auth": "^3.2",
"slim/slim": "~3.10.0",
"sentry/sdk": "^2.0"
}
}
index.php
<?php
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
require 'vendor/autoload.php';
$config = [
'settings' => [
'displayErrorDetails' => true,
],
];
$app = new \Slim\App($config);
$app->get('/', function (Request $request, Response $response, array $args) {
$response->getBody()->write("Hello");
return $response;
});
$app->add(new Tuupola\Middleware\HttpBasicAuthentication([
"relaxed" => [$_SERVER['HTTP_HOST']],
"users" => [
"root" => 'pwd',
],
"error" => function($response, $args) {
return $response->write("error");
}
]));
$app->run();
My question is: how to fix it (without drop sentry
)?
I tried to repair, but I dont know where closure Zend\Diactoros\Response
gets into Tuupola\Middleware\HttpBasicAuthentication->processError
. Downgrade sentry/sdk
not possible.
Found hotfix for me: dont use custom error response. For upper code need to remove this strings:
"error" => function($response, $args) {
return $response->write("error");
}
Zend\Diactoros\Response
does not have the write method. I think you should be able to use the following:
"error" => function($response, $args) {
return $response->getBody()->write("error");
}
@tuupola , thanks! Its worked!
I think documentation (github & php-package readme) need to be update.
Close Issue.
Yep, updated the README. Thanks for the heads up!