Laravel工匠迁移失败



我遇到了这个问题:http://pastebin.com/B5MKqD0T

PHP致命错误:未捕获的类型错误:参数1传递到Illuminate\Exception\WoopsDisplayer::display()必须是的实例异常,给定的ParseError实例

但我不知道如何解决它,我是拉拉威尔和作曲家等的新手

我正在使用laravel 4.0(因为我正在遵循我朋友的旧教程)

ParseError是在PHP7中引入的。另一方面,您使用的是Laravel 4,它不支持PHP7。

Laravel 5.1是Laravel的第一个支持PHP7的版本。

因此,有两种解决方案:

  1. 将Laravel升级到>=5.1(强烈建议这样做!)
  2. 将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 );
Laravel发布了4.2.20解决了这个问题。https://twitter.com/laravelphp/status/791302938027184128

相关内容

  • 没有找到相关文章

最新更新