【问题标题】:Laravel 5.5 throws ReflectionException CustomRequest Class doen't exist after upgrade from 5.4Laravel 5.5 从 5.4 升级后抛出 ReflectionException CustomRequest 类不存在
【发布时间】:2018-04-11 00:22:47
【问题描述】:

我最近将 Laravel 从 5.4 升级到了 5.5,但是每当我在更新或存储一些使用自定义请求的信息时向服务器发送 API 响应时,例如,图书帖子 (BooksRequest),它都会引发类似以下:

ReflectionException
Class App\Http\Requests\Admin\BooksRequest does not exist

/home/gingern/Web/www/asiacrochet/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php:25

在文件的那个部分:

public static function fromAction(array $action, $subClass = null)
    {
        $parameters = is_string($action['uses'])
                        ? static::fromClassMethodString($action['uses'])
                        : (new ReflectionFunction($action['uses']))->getParameters();

        return is_null($subClass) ? $parameters : array_filter($parameters, function ($p) use ($subClass) {
            return $p->getClass() && $p->getClass()->isSubclassOf($subClass);
        });
    }

在升级之前一切正常。

我试过了

composer dump-autoload -o

在 vendor/composer/autoload_classmap.php 中没有这样的类。 更新:我不知道怎么做,但是现在这个文件中有需要的类,例如:

'App\\Http\\Requests\\Admin\\BooksRequest' => $baseDir . '/app/Http/Requests/Admin/BooksRequest.php',

我的 BooksRequest 课程的一部分:

<?php

namespace App\Http\Requests\Admin;

use Illuminate\Foundation\Http\FormRequest;

use Illuminate\Validation\Factory as ValidationFactory;

use Carbon\Carbon;
use Purifier;
use App\Book;
use App\Traits\RequestsExtraFunctions;

class BooksRequest extends FormRequest
{
    use RequestsExtraFunctions;

    public function __construct(ValidationFactory $validationFactory)
    {
        $this->setExtraImagesRules($validationFactory, 'App\Book');
    }

    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        $id = (int)$this->route('book');

        $rules = [
            //some rules
        ];
        //some additional rules
        return $rules;
    }

    public function all()
    {
        $input = parent::all();
        //some manipulations on input
        return $input;
    }
}

使用 BooksRequest 的控制器:

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use Illuminate\Support\Facades\Auth;
use Validator;

use App\Http\Requests\Admin\BooksRequest;
use App\Book;

class BooksController extends Controller
{
    public function store(BooksRequest $request)
    {
        $input = $request->all();  
    //some manipulations
        return redirect()->route('admin.books.index');     
    }

    public function update(BooksRequest $request, $id)
    {
        $book = Book::find($id);
    //some manipulations
        return redirect()->route('admin.books.edit', $book->id)->with('status', trans('status.edit_success'));
    }
}

我的问题也与这个问题相似,但不完全一样,答案没有帮助https://laracasts.com/discuss/channels/laravel/laravel-51-throws-reflectionexception-after-upgrade-from-50?page=1

【问题讨论】:

  • 你也可以试试php artisan clear-compiled 吗?
  • 同样的错误。

标签: php laravel composer-php laravel-5.5


【解决方案1】:

从 5.4 升级到 5.5 后,我遇到了同样的错误。 我确定是因为自定义请求类中的 all() 方法。

Laravel 5.5 Upgrade Guide

所以我只是为了测试目的而尝试了这个:

public function all()
{
    dd('test');
}

效果不佳,收到了一个 ReflectionException ,表明我的自定义请求不存在。 所以我只是完全删除了 all() 方法,并且由于某种原因它起作用了,嗯...

【讨论】:

    【解决方案2】:

    这可以通过改变来解决:

    public function all()
    {
        dd('test');
    }
    

    到:

    public function all($keys = null)
    {
        dd('test');
    }
    

    upgrade process to 5.5 中的签名已更改。

    【讨论】:

      【解决方案3】:
      composer dump-autoload
      

      我遇到了同样的问题,但效果很好

      【讨论】:

      • 谢谢哥们,你让我开心...! :)
      猜你喜欢
      • 2017-07-02
      • 2018-06-17
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 2018-09-16
      • 2016-09-15
      相关资源
      最近更新 更多