调用未定义的方法Illuminate \ Http \ Response :: view()

时间:2015-07-04 19:26:57

标签: laravel laravel-5 composer-php

我安装了Laravel,现在每次运行composer updatephp artisan routes或任何作曲家命令时我都会收到此错误:

Call to undefined method Illuminate\Http\Response::view()

到目前为止,我已经在互联网上搜索并尝试了以下建议的解决方案,但没有任何效果:

1)网上有很多建议的答案说要删除vendor/compiled.php并再次运行作曲家更新。但是当我去vendor文件夹时,我找不到任何compile.php文件。存在的唯一文件是:autoload.php

2)我也尝试在storage/framework/文件夹中搜索compiled.php,但也没有。

3)我甚至尝试使用--force标志php artisan optimize --force运行优化,它显示与上面相同的错误。

4)我查看了boostrap / autoload.php的编译路径,它说$compiledPath = __DIR__.'/cache/compiled.php';我只能看到boostrap / cache文件夹而且没有这个文件。

这里有什么问题?我是Laravel的新手,我不明白这个错误意味着什么。按照那里的答案,我四处寻找compiled.php删除并再次运行更新,我甚至不知道这是否是正确的解决方案。有人可以帮我解决这个问题吗?

我昨天做的更新后安装了 Laravel 5.1.6 。我今天也运行了composer dumpautoload命令,我想知道在此之后是否发生了这个错误。现在,composer中的任何命令都会出现上述错误。

修改 现在,即使我的网站浏览器视图显示错误:

FatalErrorException in Facade.php line 210: 
Call to undefined method Illuminate\Foundation\Application::missing()

我还尝试删除完整的供应商文件夹和composer.lock,然后重新运行composer install。在生成自动加载文件时,在安装结束时,它再次显示此错误并停止。

编辑2: @NehalHasnayeen在评论中得到了绝对正确的答案。此错误是由于app在Response类上调用view方法引起的,而响应类没有view方法。一旦我从我的路线中移除它,它就有效了。这是我的路线档案:

Route::get('/', function () {
    return view('index');
    //return View::make('index');
});

Route::group(['prefix' => 'api'], function()
{
    Route::resource('authenticate', 'AuthenticateController', ['only' => ['index']]);
    Route::post('authenticate', 'AuthenticateController@authenticate');
});

// -------- THIS WAS CAUSING THE ISSUE - REMOVING THIS WORKED AFTER THAT ------
//App::missing(function($exception) {
//    return view('index');
//});

我的最后一个问题是,为什么全能路线都会抛出这个错误?我从here读到,添加上述内容会将所有其他路由请求重定向到索引。什么是正确的方法?它是在Laravel 5中改变了还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

第一个错误: 你的app在Response类上调用了view方法,但是响应类没有view方法,所以找到它调用这个方法的文件&删除它&用正确的方法替换它

第二个错误: App :: missing适用于laravel 4版本,它将在laravel 5中删除。要在app \ exceptions \ handler.php文件中实现相同功能,请在渲染方法中添加此项

public function render($request, Exception $e)
{
    if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) {
        return response()->view('index', [], 404);
    }

    return parent::render($request, $e);
}