如果你想嘗試表達,我建議使用骨架安裝程序。它給你選擇要安裝的選項。其中一個選項是whoops錯誤處理程序,它提供了關於異常的大量詳細信息。
官方文檔是在這裏有大量的信息:https://docs.zendframework.com/zend-expressive/
安裝程序文檔:https://docs.zendframework.com/zend-expressive/getting-started/skeleton/
更新:添加ErrorHandler記錄例如
至於你的ErrorHandler可以使用基地Zend\Stratigility\Middleware\ErrorHandler
。您可以將listener附加到該ErrorHandler並將其用於日誌記錄。或者,您可以複製該課程並將其修改爲您的需要。
下一步就是爲它創造一個ErrorHandlerFactory:
<?php
// src/Factory/ErrorHandler/ErrorHandlerFactory.php
namespace App\Factory\ErrorHandler;
use Interop\Container\ContainerInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Log\LoggerInterface;
use Throwable;
use Zend\Diactoros\Response;
use Zend\Expressive\Middleware\ErrorResponseGenerator;
use Zend\Stratigility\Middleware\ErrorHandler;
class ErrorHandlerFactory
{
public function __invoke(ContainerInterface $container)
{
$generator = $container->has(ErrorResponseGenerator::class)
? $container->get(ErrorResponseGenerator::class)
: null;
$errorHandler = new ErrorHandler(new Response(), $generator);
if ($container->has(LoggerInterface::class)) {
$logger = $container->get(LoggerInterface::class);
$errorHandler->attachListener(function (
Throwable $throwable,
RequestInterface $request,
ResponseInterface $response
) use ($logger) {
$logger->error('"{method} {uri}": {message} in {file}:{line}', [
'date' => date('Y-m-d H:i:s'),
'method' => $request->getMethod(),
'uri' => (string) $request->getUri(),
'message' => $throwable->getMessage(),
'file' => $throwable->getFile(),
'line' => $throwable->getLine(),
]);
});
}
return $errorHandler;
}
}
之後,你需要註冊的ErrorHandler。您可以將其添加到config/autoload/middleware-pipeline.global.php
,特別是在middleware => always
部分。這樣它會一直運行。如果您將它註冊爲第一個,它將在其他任何事情之前運行。
<?php
// in config/autoload/middleware-pipeline.global.php
use Acme\Container\ErrorHandlerFactory;
use Zend\Stratigility\Middleware\ErrorHandler;
return [
'dependencies' => [
/* ... */
'factories' => [
ErrorHandler::class => ErrorHandlerFactory::class,
/* ... */
],
/* ... */
],
'middleware_pipeline' => [
'always' => [
'middleware' => [
ErrorHandler::class,
/* ... */
],
'priority' => 10000,
],
/* ... */
],
];
Zend Expressive v2.0已於3月7日發佈,錯誤處理選項在該版本中稍有改動和改進。這裏是[最新文檔]的鏈接(https://zend-expressive.readthedocs.io/en/latest/features/error-handling/)。 – edigu
嗨。我正在使用它來安裝。 https://docs.zendframework.com/zend-expressive/getting-started/skeleton/因此,如果我再次刪除所有內容並執行作曲家安裝,那麼我將獲得最新版本? – sparkmix