2017-06-09 16 views
0

問題:GET /print-jobs/を実行すると、コントローラーのindexメソッドに正しくルーティングされます。私がPOST /print-jobs/と言うとき、それは私のstoreメソッドにルーティングする必要があります。しかし、私のindexメソッドにもルーティングされているようです。これは、私がApacheでLaravelを実行している私のプロダクション環境でのみ発生します。GETとPOSTリクエストは、Laravel 5.4の同じコントローラにルーティングします。

ルートコード:

Route::group(['prefix' => 'print-jobs'], function() { 
    Route::get('/', '[email protected]'); 
    Route::get('/{printJob}', '[email protected]')->where(['printJob' => '[0-9]+']); 
    Route::post('/', '[email protected]'); 
    ... 
} 

関連するコントローラコード:今すぐ

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Log; 

class PrintJobMasterController extends Controller { 
    /** 
    * Display all PrintJob models 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index(Request $request) { 
     Log::info('PJMC::index: rendering index of all print jobs'); 
     ...; 
    } 
    /** 
    * Store a newly job request en masse 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function store(Request $request) { 
     Log::info("PJMC::store: creating new job"); 
     ...; 
    } 
    ...; 
} 

、私は私のログに、私はGET /print-jobs/を呼び出すときPJMC::index:で始まるメッセージとPJMC::store:ときで始まるメッセージを見ることを期待します私はPOST /print-jobs/と呼んでいます。しかし、両方の時間は、ブラウザでこれを行うとき:index方法にどちらの回のリクエストルート

[2017-06-09 10:27:17] local.INFO: PJMC::index: rendering index of all print jobs 
[2017-06-09 10:27:23] local.INFO: PJMC::index: rendering index of all print jobs 

:私のブラウザから$.get('/print-jobs')$.post('/print-jobs/', {_token: window.Laravel.csrfToken, ...})、私は私のログファイルに次を参照してください!私は自分のブラウザで自分のネットワーク履歴を調べました。要求は実際にGETPOSTとして登録されています。これは、問題がバックエンドのどこかにあると考えています。しかし、私がLaravelのテストスイートを使ってこれらのルートを呼び出すと、何の問題もありません。

アイデア?前もって感謝します。

+0

あなたはlaravelエラーやPHPのエラーログには何も見ていますか? – Adam

+0

あなたの投稿リクエストをルートの上に置いてみてください!ルート::投稿が最初に行く! –

+0

@AdamAエラーは表示されません。ログ内のそれらの行だけが私が得ているヒントです。 –

答えて

1

$.post()の末尾のスラッシュ/を削除しても問題ありません。

間違っ:

$.post('/print-jobs/', {_token: window.Laravel.csrfToken, ...}) 

正しい:

$.post('/print-jobs', {_token: window.Laravel.csrfToken, ...}) 
+0

そう思った。ありがとう!なぜこれが違いになるのですか?私は一般的にURIの末尾にスラッシュを避けるべきですか?彼らが適切/必要な場合、そうでない場合がありますか? –

+1

Laravel yesを使用している場合。 '.htaccess'ファイルにリダイレクトルールがあります。 [Laravelのスラッシュをローカルホストにリダイレクトする](https://stackoverflow.com/questions/21735527/laravel-trailing-slashes-redirect-to-localhost)を見てください。 –

関連する問題