Laravel 5.5 抛出 ReflectionException CustomRequest 类在从 5.4 升级后不存在



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

ReflectionException
Class AppHttpRequestsAdminBooksRequest 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

在供应商/作曲家/autoload_classmap.php中没有这样的类。更新:我不知道怎么做,但现在这个文件中有需要的类,例如:

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

我的 BooksRequest 类的一部分:

<?php
namespace AppHttpRequestsAdmin;
use IlluminateFoundationHttpFormRequest;
use IlluminateValidationFactory as ValidationFactory;
use CarbonCarbon;
use Purifier;
use AppBook;
use AppTraitsRequestsExtraFunctions;
class BooksRequest extends FormRequest
{
    use RequestsExtraFunctions;
    public function __construct(ValidationFactory $validationFactory)
    {
        $this->setExtraImagesRules($validationFactory, 'AppBook');
    }
    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 AppHttpControllersAdmin;
use IlluminateHttpRequest;
use AppHttpControllersController;
use IlluminateSupportFacadesAuth;
use Validator;
use AppHttpRequestsAdminBooksRequest;
use AppBook;
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

composer dump-autoload

我遇到了同样的问题,这工作得很好

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

拉维尔 5.5 升级指南

所以我尝试这样做只是为了测试目的:

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

效果不佳,得到一个反射异常,我的自定义请求不存在。所以我只是完全删除了 all() 方法,它出于某种原因起作用,嗯......

这可以通过更改以下内容来解决:

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

自:

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

签名在升级到 5.5 的过程中已更改。

相关内容

  • 没有找到相关文章

最新更新