Laravel 5获得随机发布

时间:2017-02-27 15:48:46

标签: php ajax laravel random laravel-5

有一个链接&#34;随机故事&#34;我网站主页上的<a href="#" class="btn-get-random-post">Get Random Story</a>,点击后我需要从数据库中随机发帖并在同一窗口显示。 我使用Laravel 5.4。

class PostsController extends Controller
{

public function index() {
    return redirect('/');
}

public function show($id) {
    $post = Post::findOrFail($id);
    return view('posts.show', compact('post'));
}

public function getRandomPost() {
    $post = Post::inRandomOrder()->first();
    return view('posts.show', compact('post'));
}
}

路由

Route::get('posts', 'PostsController@index');
Route::get('posts/create', 'PostsController@create');
Route::get('posts/{id}', 'PostsController@show');
Route::post('posts', 'PostsController@store');
Route::post('publish', 'PostsController@publish');
Route::post('delete', 'PostsController@delete');
Route::post('get-random-post', 'PostsController@getRandomPost');

JS

$(document).ready(function() { 
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

$('.btn-get-random-post').on('click', function(){

    $.ajax({
        type: 'post',
        url: './get-random-post',               
        error: function(jqXHR, textStatus, errorThrown) { 
            console.log(JSON.stringify(jqXHR));
            console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
        }
    });
    return false;
});

});

我这里有两个问题 1.方法getRandomPost()返回post,但如何显示它?我想从方法mysite/post/{id}获取与网址show类似网址的结果页面 2.有没有办法在没有AJAX的情况下获取和显示随机帖子(使用网址mysite/post/{id})?

UPD
控制器

class PostsController extends Controller
{


public function index() {
    return redirect('/');
}

public function show($id) {
    $post = Post::findOrFail($id);
    return view('posts.show', compact('post'));
}

public function getRandomPost() {
    $post = Post::inRandomOrder()->first();
    return redirect()->route('posts.show', ["id" => $post->id]);
}
}
主页上的

链接 <a href="{{ action('PostsController@getRandomPost') }}">Random Story</a>

路由

Route::get('/', 'HomeController@index');

Route::get('posts', 'PostsController@index');
Route::get('posts/create', 'PostsController@create');
Route::get('posts/{id}', 'PostsController@show')->name('posts.show');
Route::post('posts', 'PostsController@store');
Route::post('publish', 'PostsController@publish');
Route::post('delete', 'PostsController@delete');
Route::post('get-random-post', 'PostsController@getRandomPost');
Route::post('dashboard/delete', 'PostsController@delete');
Route::post('dashboard/unpublish', 'PostsController@unpublish');
Route::post('dashboard/restore', 'PostsController@restore');

错误 enter image description here

2 个答案:

答案 0 :(得分:1)

相反,如果在geo:point中返回一个视图 返回对路径的重定向响应

但首先,

您似乎没有为路线指定名称。

更改getRandomPostRoute::get('posts/{id}', 'PostsController@show');

此外,您可能还想为随机发布路线指定名称,您可以在视图中为其生成网址

通过这种方式,您将能够为其生成路线。

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

毕竟,您只需在链接上使用路线,或在按钮点击路线后重定向页面:return redirect()->route('posts.show', ["id" => $post->id]);

不需要ajax。

答案 1 :(得分:1)

您还可以通过将网址更改为mysite/post来完全避免使用javascript。如果有id,则显示路由,如果没有,则路由到getRandomPost()方法。