Ларавел 5.7. Проверка привязки модели маршрута - PullRequest
0 голосов
/ 19 апреля 2019

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

Что-то вроде

Route::post('/do-something/{something}', 'SomeController@store');

и

$request->validate([
    'something' => [
        new MyFirstVeryComplexRule,
        new MySecondVeryComplexRule,
        new MyThirdVeryComplexRule,
        //...
    ],
]);

Я предполагаю, что $value, переданное каждому правилу, будет экземпляром класса App\Something.

Можно ли этого добиться?

Ближайший вариант, который я могу придумать, - передать id модели и затем запустить App\Some::find($value) в каждом экземпляре правила, но это снижает производительность и не масштабируется.

Ответ

Нет, это невозможно, поскольку x, y, z, попробуйте a, b, c

также будут приняты.

1 Ответ

1 голос
/ 19 апреля 2019

Вы можете создать собственную привязку в вашем RouteServiceProvider следующим образом:

public function boot()
{
    parent::boot();

    Route::bind('something', function ($value) {
        $instance = Model::find($value) ?? abort(404);

        $validator = Validator::make([
            'something' => $instance,
        ], [
            'something' => [
                new MyFirstVeryComplexRule,
                new MySecondVeryComplexRule,
                new MyThirdVeryComplexRule
            ]
        ]);

        if ($validator->errors()->any()) {
            // perform on error tasks
        }

        return $instance;
    });
}

Тогда $value каждого правила получит экземпляр вашей модели.

Для более подробной информацииинформацию, вы можете посмотреть на Настройка логики разрешения в Привязка модели маршрута : https://laravel.com/docs/5.8/routing#route-model-binding

...