Soy nuevo en laravel e intento que mis reglas de validación personalizadas funcionen en mi controlador. Está mostrando que la clase no existe.

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

Hice el archivo de solicitud usando el comando artesanal.

lando artisan make:request StoreBooksRequest

Este es mi archivo de solicitud:

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'
        ];
    }
}

Y este es el controlador donde estoy tratando de que funcionen las reglas de solicitud personalizadas:

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();
    }

Creo que el problema es con el error que dice que el archivo de solicitud está en la carpeta Controladores y no en la carpeta de Solicitudes estándar.

1
MrMilkshake 10 may. 2019 a las 22:21

3 respuestas

La mejor respuesta

No ha incluido el espacio de nombres de la clase de su solicitud personalizada. Agregue use App\Http\Requests\StoreBooksRequest; después de use Illuminate\Http\Request;

2
Tawhidul Islam Khan 10 may. 2019 a las 19:41

Parece que estás usando un espacio de nombres incorrecto para tu

 Class App\Http\Controllers\StoreBooksRequest

Su espacio de nombres está configurado en namespace App\Http\Requests; mientras lo llama desde el controlador, si mueve su clase a App\Http\Requests.

Además, no olvide importar la clase en su controlador

use StoreBooksRequest
0
Aditya Thakur 10 may. 2019 a las 19:28

Cuando ejecutas el php artisan make:request Myrequestname, Laravel crea el archivo dentro del subdirectorio App \ Http \ Request, por lo que debes tener cuidado de usar el espacio de nombres correcto, otra cosa que siempre debes tener cuidado es sobre el nombre que usas, no es el mismo Mycontroller que mycontroller y es peor si su servidor es un servidor Linux, porque el sistema de archivos hace la diferencia entre mayúsculas.

0
Gustavo Jordan 10 may. 2019 a las 23:26