Laravel не поддерживает несколько запросов формы в одном контроллере? - PullRequest
0 голосов
/ 28 февраля 2020

У меня один контроллер, где я использую разные запросы для проверки данных по каждому методу. Я пытался использовать запросы с полным пространством имен и путем импорта тоже, но в обоих случаях не работает.

Например

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use App\Http\Requests\UserRequest;
use App\Http\Requests\RegisterRequest;
use App\Http\Requests\PositionRequest;
use App\Http\Requests\UserOrderRequest;

class UserController extends Controller
{
    public function register(\App\Http\Requests\RegisterRequest $request)
    {
        // do something
    }

    public function positions(\App\Http\Requests\PositionRequest $request)
    {
        // do something
    }

    public function user(\App\Http\Requests\UserRequest $request)
    {
        // do something
    }

    public function orders(\App\Http\Requests\UserOrderRequest $request)
    {
        // do something
    }
}

В этом контроллере laravel может Не найдено ни одного файла запроса и выдает ошибку с сообщением:

ReflectionException: Class App \ Http \ Requests [Имя запроса] не существует в файле / home / c / website / vendor / laravel / framework / src / Illuminate / Routing / RouteSignatureParameters. php в строке 25

Пример кода файла моего запроса

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class RegisterRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            "name" => "required|min:3|max:100",
            "email" => "required|email|unique:users",
            "phone" => "required|numeric|unique:users",
            "positions" => "required|array|min:1|max:10",
            "positions.*.name" => "required|string|min:2|max:50|distinct",
            "password" => "required|min:8|string|max:255"
        ];
    }
}

I пробные команды:

composer dump autoload

php artisan config:cache
php artisan config:clear
php artisan cache:clear
php artisan route:clear

Laravel Framework: 6.17.0

PHP: 7.4

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

Не проверено, но попробуйте

public function register(RegisterRequest $request)
{
    //
}

Вам не нужно полное пространство имен, поскольку вы импортировали их уже вверху.

Также убедитесь, что у вас есть файл UserRequest . php в папке App \ Http \ Requests и что его пространство имен совпадает

0 голосов
/ 28 февраля 2020
<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;


class RegisterRequest extends Request
{

    public function rules()
    {
        return [
            "name" => "required|min:3|max:100",
            "email" => "required|email|unique:users",
            "phone" => "required|numeric|unique:users",
            "positions" => "required|array|min:1|max:10",
            "positions.*.name" => "required|string|min:2|max:50|distinct",
            "password" => "required|min:8|string|max:255"
        ];
    }
}
0 голосов
/ 28 февраля 2020

Как выглядят классы Request? Что находится в файлах:

App\Http\Requests\UserRequest
App\Http\Requests\RegisterRequest
App\Http\Requests\PositionRequest
App\Http\Requests\UserOrderRequest

Убедитесь, что путь и имена этих файлов, пространства имен в этих файлах и операторы использования, которые вы используете в этом файле, полностью совпадают. Регистр может иметь значение в зависимости от настроек вашего сервера, поэтому убедитесь, что они совпадают.

Поскольку вы используете для них операторы, вам не нужно использовать полное пространство имен при их внедрении.

   public function orders(UserOrderRequest $request)
    {
        // do something
    }
...