我使用相同的视图来显示一篇帖子和随机帖子
路由
Route::get('posts/{id}', 'PostsController@show')->name('posts.show');
Route::get('get-random-post', 'PostsController@getRandomPost');
PostsController 中的方法
public function show($id) {
$post = Post::findOrFail($id);
return view('posts.show', compact('post'));
}
public function getRandomPost() {
$post = Post::inRandomOrder()
->where('is_published', 1)->first();
return redirect()->route('posts.show', ["id" => $post->id]);
}
但现在我需要在两个视图之间添加一个小差异。我怎么能这样做?
UPD 我向Controller
中的方法添加了变量$randomPost
public function show($id) {
$randomPost = false;
$post = Post::findOrFail($id);
return view('posts.show', compact('post', 'randomPost'));
}
public function getRandomPost() {
$randomPost = true;
$post = Post::inRandomOrder()
->where('is_published', 1)->first();
return redirect()->route('posts.show', ["id" => $post->id]);
}
并将以下代码添加到show
视图
@if($randomPost)
some text
@endif
但我不知道如何将变量从getRandomPost()
传递到视图?
UPD2
结果我使用了会话,它有效,但我不确定
方法
public function getRandomPost() {
$post = Post::inRandomOrder()
->where('is_published', 1)->first();
session()->flash('random_post', 'ok');
return redirect()->route('posts.show', ["id" => $post->id]);
}
视图
@extends('layouts.app')
@section('content')
<a href="{{ action('HomeController@index') }}">Home page</a>
<h2>#{{$post->id}}</h2>
{!! nl2br(e($post->text)) !!}
<?php if(session()->has('random_post')){
echo '<div style="text-align: center">';
echo link_to_action('PostsController@getRandomPost', 'Random Post', $parameters = array(), $attributes = array());
echo '</div>';
}?>
@stop
答案 0 :(得分:1)
您可以使用会话闪存,它仅在后续请求中持续:
// set
session()->flash('random_post', 'ok');
// check
if(session()->has('random_post')){
// is random
答案 1 :(得分:0)
我想最简单的方法是通过传递一个默认变量来调用getRandomPost
中的函数。
public function show($id, $randomPost = false) {
$post = Post::findOrFail($id);
return view('posts.show', compact('post', 'randomPost'));
}
public function getRandomPost() {
$post = Post::inRandomOrder()->where('is_published', 1)->first();
$this->show($post->id, true);
}