Laravel 5.7 – переопределить метод all() в классе проверки запроса для проверки параметров маршрута?

Я хочу проверить параметры маршрута в классе проверки запроса. Я знаю, что этот вопрос задавался много раз, но Согласно этому вопросу Я переопределяю метод all() и получаю эту ошибку:

Class App\Http\Requests\DestroyUserRequest does not exist

Я использую Ларавель 5.7.

Маршрут:

Route::delete('/user/{userId}/delete', 'UserController@destroy')->name('user.destroy');

Контроллер:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\DestroyUserRequest;
use App\User;

class UserController extends Controller
{

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return Response
     */
    public function destroy(DestroyUserRequest $request)
    {
        User::find($request->route('userId'))->delete();
        return $request->route('userId');
    }
}

DestroyUserRequest:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class DestroyUserRequest 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 [
            'userId' => 'integer|exists:users,id'
        ];
    }

    public function all()
    {
        $data = parent::all();
        $data['userId'] =  $this->route('userId');
        return $data;
    }
}

Что не так с переопределением метода all()?


person Ali Hesari    schedule 19.09.2018    source источник
comment
Видимо автозагрузчик не может найти этот класс. Вы положили его в правильную папку app/Http/Requests? Вы пытались запустить composer dump-autoload?   -  person jedrzej.kurylo    schedule 19.09.2018
comment
@jedrzej.kurylo Да, я поместил файл в правильную папку. Когда я удалю метод all() из класса DestroyUserRequest, ошибка будет устранена! Я действительно смущен!   -  person Ali Hesari    schedule 19.09.2018
comment
@jedrzej.kurylo Я запускаю composer dump-autoload, но проблема не решена.   -  person Ali Hesari    schedule 19.09.2018


Ответы (1)


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

Должен быть:

public function all($keys = null)
{
    $data = parent::all($keys);
    $data['userId'] =  $this->route('userId');
    return $data;
}

потому что подпись Illuminate/Http/Concerns/InteractsWithInput.php:

/**
 * Get all of the input and files for the request.
 *
 * @param  array|mixed  $keys
 * @return array
 */
public function all($keys = null)

Изменение было сделано в Laravel 5.5. Вы можете прочитать в руководстве по обновлению:

Метод «все»

Если вы переопределяете метод all класса Illuminate\Http\Request, вам следует обновить сигнатуру метода, чтобы отразить новый аргумент $keys:

общедоступная функция все ($ ключи = ноль) {

person Marcin Nabiałek    schedule 19.09.2018