Я делаю crud, я хочу показать данные элемента, используя идентификатор, у меня есть это в web.php:
Route::get('update/{id}', 'CrudController@update');
Как я могу отрицать, что пользователь меняет идентификатор в пути на несуществующий? Что показывает только те что есть, а те что нет, которые не загружаются?






В вашем методе обновления вы можете сделать следующее:
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 по умолчанию, что вполне уместно.
Расположение контроллера не имеет ничего общего с вашей проблемой. Если вы спрашиваете, как вы можете загрузить контроллер из подпапки, вы должны сделать это: Route::get('update/{id}', 'admin\CrudController@update');
да, но MyModel::findOrFail($id); верни мне ошибку: модель не найдена
@c4rlosls Обновил ответ.
а если у меня контроллер на контроллерах/admin/?