Heidel
Heidel

Reputation: 3262

Laravel 5.4 Add a difference between views

I use the same view to show one post and random post

routes

Route::get('posts/{id}', 'PostsController@show')->name('posts.show');
Route::get('get-random-post', 'PostsController@getRandomPost');

methods in 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]);
}

but now I need to add a small difference between two views. How can I do that?

UPD I added variable $randomPost to methods in Controller

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]);
    }

and added code below to show view

@if($randomPost)
        some text
@endif

but I don't know how to pass variable from getRandomPost() to view?

UPD2

As result I used session, it works but I'm not sure about it

method

public function getRandomPost() {
    $post = Post::inRandomOrder()
        ->where('is_published', 1)->first();
    session()->flash('random_post', 'ok');
    return redirect()->route('posts.show', ["id" => $post->id]);
}

view

@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

Upvotes: 1

Views: 121

Answers (2)

mbozwood
mbozwood

Reputation: 1402

I guess the easiest way would be to call the function from the getRandomPost by passing a default variable through.

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

Upvotes: 0

dparoli
dparoli

Reputation: 9171

You can use session flash, it lasts only on subsequent request:

// set
session()->flash('random_post', 'ok');

// check
if(session()->has('random_post')){
    // is random

Upvotes: 1

Related Questions