【问题标题】:Laravel artisan migrate failLaravel 工匠迁移失败
【发布时间】:2016-04-06 17:29:43
【问题描述】:

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

PHP 致命错误:未捕获的 TypeError:参数 1 传递给 Illuminate\Exception\WhoopsDisplayer::display() 必须是 异常,给出 ParseError 的实例

但我不知道如何解决它,我是 laravel 和 composer 等的新手。

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

【问题讨论】:

标签: php laravel composer-php migrate laravel-artisan


【解决方案1】:

ParseErrorwas introduced 在 PHP 7 中。另一方面,您使用的是不支持 PHP7 的 Laravel 4。

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

所以,有两种解决方案:

  1. 将 Laravel 升级到 >= 5.1(强烈推荐这个!)
  2. 将 PHP 降级到 5.*

阅读更多关于 PHP7 中可抛出异常的信息:https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/

【讨论】:

  • 如何降级到 php 5?
  • 这取决于您的操作系统,请指定它以便我为您提供帮助。
  • 我使用的是 Windows 10
  • 我也在用xampp
  • 去xampp网站下载PHP 5.6版本:i.imgur.com/BfcfCpl.png
【解决方案2】:

找到了一个很好的解决方法来禁用 laravel 错误处理程序。将此添加到您的 app/config/local/app.php 的顶部(就在返回数组(...)之前:

set_error_handler(null);
set_exception_handler(null);

【讨论】:

  • 这是一个很好的解决方案,如果你不想或不能降级到 PHP 5.*,以及更新到 Laravel 5.* 的工作量太大
【解决方案3】:

还有另一种方法,您可以用自己的方法包装 Laravel 异常处理程序,将新的 Error 类型转换为 Exception 实例,然后再传递回 Laravel。

在应用程序的某处创建以下类:

namespace Some\Namespace;

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( 
    ['Some\Namespace\ErrorWrapper', 'handleException']);

ErrorWrapper::setPreviousExceptionHandler( $existing );

【讨论】:

    【解决方案4】:

    Laravel 发布了 4.2.20 解决了这个问题。 https://twitter.com/laravelphp/status/791302938027184128

    【讨论】:

      猜你喜欢
      • 2017-12-12
      • 2020-01-22
      • 2016-07-08
      • 2019-04-22
      • 2018-12-02
      • 1970-01-01
      • 2014-06-01
      • 2017-11-29
      • 2018-09-16
      相关资源
      最近更新 更多