Laravel 5.4添加视图之间的差异

时间:2017-02-28 15:58:45

标签: laravel laravel-5

我使用相同的视图来显示一篇帖子和随机帖子

路由

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

2 个答案:

答案 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);
}