私のサイトのメインページに「Get Random Story」というリンクがあります。クリックすると、DBからランダム投稿を取得して同じウィンドウに表示する必要があります。 私はLaravel 5.4を使用しています。Laravel 5ランダムポストを取得
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', '[email protected]');
Route::get('posts/create', '[email protected]');
Route::get('posts/{id}', '[email protected]');
Route::post('posts', '[email protected]');
Route::post('publish', '[email protected]');
Route::post('delete', '[email protected]');
Route::post('get-random-post', '[email protected]');
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;
});
});
そして、私はここで2つの問題
1.ポストを返すgetRandomPost()
方法が、どのようにそれを表示するには、がありますか?私は方法show
からのURLのようなURL mysite/post/{id}
の結果ページとして得たいと思う。
2. AJAXなしでランダム投稿(URL 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('[email protected]') }}">Random Story</a>
経路
Route::get('/', '[email protected]');
Route::get('posts', '[email protected]');
Route::get('posts/create', '[email protected]');
Route::get('posts/{id}', '[email protected]')->name('posts.show');
Route::post('posts', '[email protected]');
Route::post('publish', '[email protected]');
Route::post('delete', '[email protected]');
Route::post('get-random-post', '[email protected]');
Route::post('dashboard/delete', '[email protected]');
Route::post('dashboard/unpublish', '[email protected]');
Route::post('dashboard/restore', '[email protected]');
エラー

通常、メソッドが許可されないエラーは、ポストでgetメソッドを呼び出すような、コントローラで無効なメソッドを使用している場合を指します。あなたのルート定義を見ると、これが当てはまります。get-random-postをGETに変更してください – zedling