Все просто, ресурсный контроллеры создают роуты с переда автоматически на основе базового имени роута, таким образом у вас теперь:
Route::resource('/blog', 'NewsController');
и таким образом ваш ресурсный контроллер ожидает переменную одну, а получает другую. Вообще у тебя должны быть написано
Route::resource('blogs', 'NewsController');
и таким образом в параметры уйдет переменная blog с объектом. Но так как метод у тебя уже написан $news (да не удачно, как же единственное число, хех. Впрочем сам я такое попадался).
Так, короче говоря в web :
Route::resource('blog', 'NewsController')->parameters([
'blog' => 'news'
]);
Ну и в параметрах методов контроллера замени везде "$id" на "News $news", хотя в целом у тебя уже не ресурсный контроллер, например метод
store. Так что возможно тебе лучше расписать все в ручную. В целом изначально ресурсные контроллеры подходя либо под api логику работы, когда ты имеешь дело с Моделью/Сущностью как с ресурсом и тебе нужны стандартные методы, либо многие используют в своих CRUD логиках, но опят таки только если логика без дополнительных усложнений и переплетений как у тебя. Де факто у тебя не ресурсный контроллер и я настоятельно рекомендую расписать его в ручную.
PS еще для отладки роутов отлично подходит команда
php artisan route:list
будет видны все роуты которые ларавел генерирует, с соответствующими параметрами переменными.