我遇到了这个问题:http://pastebin.com/B5MKqD0T
PHP致命错误:未捕获的类型错误:参数1传递到Illuminate\Exception\WoopsDisplayer::display()必须是的实例异常,给定的ParseError实例
但我不知道如何解决它,我是拉拉威尔和作曲家等的新手
我正在使用laravel 4.0(因为我正在遵循我朋友的旧教程)
ParseError
是在PHP7中引入的。另一方面,您使用的是Laravel 4,它不支持PHP7。
Laravel 5.1是Laravel的第一个支持PHP7的版本。
因此,有两种解决方案:
- 将Laravel升级到>=5.1(强烈建议这样做!)
- 将PHP降级为5*
阅读PHP7中关于可丢弃异常的更多信息:https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/
找到了一个很好的方法来禁用laravel错误处理程序。将其添加到你的app/config/local/app.php的顶部(就在返回数组之前(…):
set_error_handler(null);
set_exception_handler(null);
还有另一种方法,您可以用自己的异常处理程序包装Laravel异常处理程序,将新的Error类型转换为exception实例,然后再传递回Laravel。
在应用程序中的某个位置创建以下类:
namespace SomeNamespace;
use Error;
use Exception;
class ErrorWrapper
{
private static $previousExceptionHandler;
public static function setPreviousExceptionHandler($previousExceptionHandler)
{
self::$previousExceptionHandler = $previousExceptionHandler;
}
public static function handleException($error)
{
if (!self::$previousExceptionHandler) {
return;
}
$callback = self::$previousExceptionHandler;
if ($error instanceof Error) {
$callback(new Exception($error->getMessage(), $error->getCode()));
}
else {
$callback($error);
}
}
}
在config/app.php开始时,您可以将包装类注册为默认的错误处理程序:
$existing = set_exception_handler(
['SomeNamespaceErrorWrapper', 'handleException']);
ErrorWrapper::setPreviousExceptionHandler( $existing );