GET和POST请求路由到Laravel 5.4中的同一个控制器

时间:2017-06-09 16:56:03

标签: php laravel laravel-5.4

我的问题:当我执行GET /print-jobs/时,它正确地路由到我的控制器中的index方法。当我说POST /print-jobs/时,它应该转到我的store方法。但是,它似乎也是路由到我的index方法。这只发生在我的生产环境中,我在Apache下运行Laravel。

路线代码:

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

相关控制器代码:

<?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");
        ...;
    }
    ...;
}

现在,我希望在我的日志中看到当我拨打PJMC::index:时以GET /print-jobs/开头的消息以及当我致电PJMC::store:时以POST /print-jobs/开头的消息。但是,无论是在浏览器中执行此操作的时间:$.get('/print-jobs')$.post('/print-jobs/', {_token: window.Laravel.csrfToken, ...}),我都会在我的日志文件中看到以下内容:

[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

请求两次都路由到index方法!我在浏览器中查看了我的网络历史记录,请求确实分别注册为GETPOST,这使我怀疑问题是在后端的某个地方。但是,当我使用Laravel的测试套件呼叫这些路线时,我没有任何问题。

有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

删除/中的尾部斜杠$.post(),它应该有效。

<强>错误:

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

<强>正确:

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