Laravel工匠迁移失败

时间:2016-01-02 17:16:40

标签: php laravel composer-php migrate artisan

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

  

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

但我不知道如何修复它,我是laravel和作曲家等的新手。

我正在使用laravel 4.0(因为我跟随我的朋友的老教程)

4 个答案:

答案 0 :(得分:17)

PHP 7中的

ParseError was introduced。另一方面,您使用的Laravel 4没有PHP7支持。

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

那么,有2个解决方案:

  1. 将Laravel升级为> = 5.1(强烈推荐这个!)
  2. 将PHP降级为5。*
  3. 阅读有关PHP7中可抛出异常的更多信息:https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/

答案 1 :(得分:6)

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

set_error_handler(null);
set_exception_handler(null);

答案 2 :(得分:0)

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

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

@using (Html.BeginForm("_Article", "Home", FormMethod.Post,
                                            new { enctype = "multipart/form-data" }))
{
<input name="button" value="Update" class="btn btn-info" type="submit" class="submit" />
@Html.TextAreaFor(model => model.arttext)
<script>
        CKEDITOR.replace( 'arttext' );
</script>
}

在config / app.php的开头,您可以将包装类注册为默认错误处理程序:

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);
           }
      }
}

答案 3 :(得分:0)

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