我最近将Laravel从5.4升级到版本5.5,但每当我在更新或存储使用自定义请求的某些信息(例如,预订帖子(BooksRequest))时向服务器发送API响应时,它会抛出异常,例如以下内容:
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
答案 0 :(得分:1)
Composer dump-autoload
我遇到了同样的问题,这很好用!
答案 1 :(得分:0)
从5.4升级到5.5后,我遇到了同样的错误。 我确定这是因为自定义请求类中的all()方法。
所以我尝试这只是为了测试目的:
public function all()
{
dd('test');
}
没有工作,得到一个ReflectionException我的自定义请求不存在。 所以我完全删除了all()方法,并且由于某种原因它起作用了,嗯......
答案 2 :(得分:0)
这可以通过更改:
来解决public function all()
{
dd('test');
}
为:
public function all($keys = null)
{
dd('test');
}
签名在upgrade process to 5.5中已更改。