有一个链接&#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');
答案 0 :(得分:1)
相反,如果在geo:point
中返回一个视图
返回对路径的重定向响应
但首先,
您似乎没有为路线指定名称。
更改getRandomPost
到Route::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()
方法。