У вас есть несколько вопросов здесь, поэтому я постараюсь ответить на каждый. Ответы могут быть не идеальными, так как я ухожу из памяти без возможности ссылаться или подтверждать их сам в данный момент.
Если вы пытаетесь кешировать окончательный вывод вашего представления, вы можете эффективно сделать он будет заменять ваш последний просмотр вызов на:
return Cache::rememberForever('blog-post' . $post->id, function() use ($post) {
// Do your SEO and markdown stuff here
return view('blog.post', compact('post', 'markdown'))->render();
});
Ключ кэша должен быть уникальным для сообщения. Модельная система маршрутизации ничего не знает о кеш-системе, это всего лишь способ передачи значения в контроллер, который делает некоторые предположения о входящих данных на основе URI. Так что то, что вы делаете в настоящее время, это хорошо.
Проблема в том, что ваш вопрос о стоит ли кешировать сообщение, уценку или и то и другое? в том, что это, вероятно, не будет иметь значения
1) Вы вызываете модельный маршрут GET. Это приводит к тому, что каждый раз загружается сообщение из БД, что делает кеширование самого сообщения ненужным. Это верно даже при кэшировании самого представления рендеринга.
2) Ваш вызов view требует самого Post в качестве параметра [of compact () ]. Вам нужно будет загрузить его откуда-то, что означает повторный вызов базы данных для получения сообщения.
3) Вы используете Cache :: запомнитьForever , что означает, что кеш никогда не будет истекают. Поэтому загрузка поста после первого раза будет бессмысленной, поскольку он никогда не будет использоваться снова (результаты сохраняются в кэше навсегда!). Будущие изменения (если они есть) не будут работать, если вы не аннулируете кэш (что делает RememberForever бессмысленным).
Поэтому в этом случае я рекомендую вам отойти от модельный маршрут и вместо этого попробуйте традиционный маршрут на основе идентификатора
public function show(Request $request, $id)
{
return Cache::remember('blog-post'.$id, ttl, function() use($id) {
$post = Post::find($id);
// Do SEO and markdown stuff
return view('blog.post', compact('post', 'markdown'))->render();
});
}
, где ttl - время истечения срока действия кэша.