Laravel 5.8自定义验证错误'类不存在'

时间:2019-05-10 19:21:53

标签: php laravel-5

我是laravel的新手,我正在尝试让自定义验证规则在我的控制器上运行。 这表明该类不存在。

ReflectionException thrown with message "Class App\Http\Controllers\StoreBooksRequest does not exist"

我使用artisan命令制作了请求文件。

lando artisan make:request StoreBooksRequest

这是我的请求文件:

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreBooksRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            //
            'title' => 'required|unique:books|max:150',
            'description' => 'required',
            'isbn' => 'required|max:20'
        ];
    }
}

这是我试图使自定义请求规则起作用的控制器:

namespace App\Http\Controllers;

use App\Book;
use Illuminate\Http\Request;

class BooksController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        $books = Book::all();

        return view('books.index', compact('books'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('books.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(StoreBooksRequest $request)
    {
        $book = new Book();

        $book->title = $request->title;
        $book->description = $request->description;
        $book->isbn = $request->isbn;

        $book->save();
    }

我认为问题在于错误,即请求文件位于Controllers文件夹中,而不是标准Requests文件夹中。

3 个答案:

答案 0 :(得分:0)

您似乎为自己使用了错误的命名空间

 Class App\Http\Controllers\StoreBooksRequest

如果您将类移动到namespace App\Http\Requests;,则在从控制器调用名称空间时,会将您的命名空间设置为App\Http\Requests

此外,不要忘记将类导入控制器中

use StoreBooksRequest

答案 1 :(得分:0)

您尚未包括自定义请求的类的名称空间。在use App\Http\Requests\StoreBooksRequest;之后添加use Illuminate\Http\Request;

答案 2 :(得分:0)

在执行php artisan make:request Myrequestname时,Laravel在App \ Http \ Request子目录中创建文件,因此您需要谨慎使用正确的名称空间,而您始终必须注意的另一件事是名称您使用的Mycontroller与Mycontroller并不相同,并且如果您的服务器是Linux服务器,则更糟,因为文件系统的区分大小为13个大写字母。