【问题标题】:Call to undefined method Illuminate\Http\Response::view()调用未定义的方法 Illuminate\Http\Response::view()
【发布时间】:2015-07-04 19:26:56
【问题描述】:

我已经安装了 Laravel,现在每次运行 composer updatephp artisan routes 或任何 composer 命令时都会出现此错误:

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

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

1) 网上很多建议的答案都说删除vendor/compiled.php 并再次运行作曲家更新。但是当我转到供应商文件夹时,我在那里找不到任何已编译的.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: cmets 中的@NehalHasnayeen 完全正确。这个错误是因为app调用了Response类的view方法,而response类没有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 中发生了变化还是我做错了什么?

【问题讨论】:

  • 您升级到了 5.1.6,对吧?你之前的laravel是什么版本的?
  • 我第一次安装的时候是5.1.4,后来升级到5.1.5再到5.1.6。但是升级后它可以工作一段时间。我认为我执行的最后一个命令是composer dumpautoload,这是在升级几个小时后不久,我开始注意到这些错误。不确定 dumpautoload 是否会导致此错误,所以如果上次升级导致它。
  • 你的“bootstrap/cache”目录是否可写?
  • 你的应用在 Response 类上调用 view 方法,但是 response 类没有 view 方法,所以找到它调用这个方法的文件并删除它并用正确的方法替换它
  • App::missing 用于 laravel 4 版本,它在 laravel 5 中被删除,对于自定义异常处理,在 app\exceptions 文件夹中有一个处理程序类。使用那个

标签: laravel laravel-5 composer-php


【解决方案1】:

对于第一个错误: 您的应用在 Response 类上调用 view 方法,但 response 类没有 view 方法,所以找到它调用此方法的文件并将其删除并用正确的方法替换它

对于第二个错误: App::missing 用于 laravel 4 版本,它在 laravel 5 中被删除。为了在你的 app\exceptions\handler.php 文件中实现相同的功能,请在 render 方法中添加这个

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

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

【讨论】:

    猜你喜欢
    • 2016-03-14
    • 2019-11-12
    • 2016-11-18
    • 1970-01-01
    • 2015-08-24
    • 2018-07-04
    • 1970-01-01
    • 2015-09-23
    • 2018-10-02
    相关资源
    最近更新 更多