处理多个帖子请求到同一个网址Laravel 5

Cha*_*qas 1 php post laravel-routing laravel-5.1

我在页面上有两个表单都通过提交数据POST method.我想在同一个url即/ home上处理这两个请求,并为这两个表单使用不同的控制器和方法.以下是两条路线.

Route::post('home' ,'FacebookControllers\PostsController@save');
Route::post('home' , 'FacebookControllers\MessageController@storeMessage');
Run Code Online (Sandbox Code Playgroud)

PostsController@save我正在检查

if(isset($_POST['submitPost']) && $_SERVER['REQUEST_METHOD']=='POST'){
//do something
}
Run Code Online (Sandbox Code Playgroud)

MessageController@storeMessage我做其他形式的同样做

if(isset($_POST['sendMessage']) && $_SERVER['REQUEST_METHOD']=='POST'){
            return "got it";
        }
Run Code Online (Sandbox Code Playgroud)

问题是只有第二条路线有效.如果我做对或错,我不会.请引导我走向正确的方向.

chr*_*con 5

Route::post('home' ,'FacebookControllers\PostsController@save');
Route::post('home' , 'FacebookControllers\MessageController@storeMessage');
Run Code Online (Sandbox Code Playgroud)

不起作用 - laravel应该如何确定发布到哪里?我将采用的方式是创建两个作业和一个路径,然后检查值Request并分派正确的作业.

首先,创建两个作业类

php artisan make:job FacebookSave
php artisan make:job FacebookStoreMessage
Run Code Online (Sandbox Code Playgroud)

生成的文件看起来很像这样:

<?php

namespace App\Jobs;

use App\Jobs\Job;
use Illuminate\Contracts\Bus\SelfHandling;

class FacebookSaveMessage extends Job implements SelfHandling
{
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

在作业的handle()方法中,您可以在Controller中执行您想要执行的操作.

现在路线,让我们做

Route::post('home' ,'FacebookControllers\PostsController@findAction');
Run Code Online (Sandbox Code Playgroud)

并根据你在PostsController中的这个,添加一个方法(我称之为findAction),如下所示:

public function findAction(\Illuminate\Http\Request $request) {
    if ($request->has('submitPost')) {
        return $this->dispatch(new \App\Jobs\FacebookSave($request));
    } else if ($request->has('storeMessage')) {
        return $this->dispatch(new \App\Jobs\FacebookStoreMessage($request));
    }
    return 'no action found';
}
Run Code Online (Sandbox Code Playgroud)

这样,将根据提交的值执行正确的操作.

将作业的构造函数更改为:

public function __construct($data)
    {
        $this->data = $data;
    }
Run Code Online (Sandbox Code Playgroud)

您可以使用在作业handle()方法中提交的表单访问提交的值$this->data