我是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文件夹中。
答案 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个大写字母。