Laravel 5.4 添加视图之间的差异

问题描述 投票:0回答:2

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

路线

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
    
php laravel laravel-5
2个回答
1
投票
您可以使用会话闪存,它仅在后续请求时持续:

// set session()->flash('random_post', 'ok'); // check if(session()->has('random_post')){ // is random
    

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); }
    
© www.soinside.com 2019 - 2024. All rights reserved.