Загружать только маршрут с существующим параметром

Я делаю crud, я хочу показать данные элемента, используя идентификатор, у меня есть это в web.php:

Route::get('update/{id}', 'CrudController@update');

Как я могу отрицать, что пользователь меняет идентификатор в пути на несуществующий? Что показывает только те что есть, а те что нет, которые не загружаются?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
27
1

Ответы 1

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

public function update($id)
{
    MyModel::findOrFail($id);
    //...perform other actions
}

Он выдаст ответ 404, если запрошенный $id не существует.

Затем вы можете поймать его, если хотите, в методе render()app\Exceptions\Handler.php:

use Illuminate\Database\Eloquent\ModelNotFoundException;
.
.
.
public function render($request, Exception $exception)
{
    if ($exception instanceof ModelNotFoundException) {
        if ($request->wantsJson()) {
            return response()->json([
                'data' => 'Resource not found'
            ], 404);
        } else {
           abort(404);
        }
    }
    return parent::render($request, $exception);
}

Или, если вы не хотите проходить через все проблемы с настройкой в ​​​​обработчике, вы также можете сделать:

public function update($id)
{
    if (! $model = MyModel::find($id)) {
        abort(404);
    }
    //...perform other actions with $model
}

Метод abort(404) переводит пользователя на страницу Laravel Page not found по умолчанию, что вполне уместно.

а если у меня контроллер на контроллерах/admin/?

c4rlosls 24.01.2019 01:54

Расположение контроллера не имеет ничего общего с вашей проблемой. Если вы спрашиваете, как вы можете загрузить контроллер из подпапки, вы должны сделать это: Route::get('update/{id}', 'admin\CrudController@update');

Tanmay 24.01.2019 02:26

да, но MyModel::findOrFail($id); верни мне ошибку: модель не найдена

c4rlosls 24.01.2019 10:30

@c4rlosls Обновил ответ.

Tanmay 24.01.2019 11:28

Другие вопросы по теме