php - 处理对同一 url Laravel 5 的多个发布请求

标签 php post laravel-routing laravel-5.1

我在一个页面上有两个表单,它们都通过 POST 方法 提交数据。我想处理同一 url 上的两个请求,即/home 并为两种形式使用不同的 Controller 和方法。以下是两条路线。

Route::post('home' ,'FacebookControllers\PostsController@save');
Route::post('home' , 'FacebookControllers\MessageController@storeMessage');

PostsController@save 我正在检查

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

MessageController@storeMessage 中,我对其他表单也做同样的事情

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

问题是只有第二条路线有效。不管我做对还是错,我都不会。请引导我走向正确的方向。

最佳答案

Route::post('home' ,'FacebookControllers\PostsController@save');
Route::post('home' , 'FacebookControllers\MessageController@storeMessage');

行不通 - Laravel 应该如何确定发布到哪里?我要走的路是创建两个作业和一个路由,然后检查 Request 中的值并分派(dispatch)正确的作业。

首先,创建两个作业类

php artisan make:job FacebookSave
php artisan make:job FacebookStoreMessage

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

<?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()
    {
        //
    }
}

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

现在的路线,让我们做

Route::post('home' ,'FacebookControllers\PostsController@findAction');

并根据此在您的 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';
}

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

将作业的构造函数更改为如下内容:

public function __construct($data)
    {
        $this->data = $data;
    }

并且您可以使用 $this->data

从作业的 handle() 方法中提交的表单访问提交的值

关于php - 处理对同一 url Laravel 5 的多个发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32279329/

相关文章:

php - 如何获取 Storage::put 返回 false 的原因?

php - 在 PHP 中处理发往多个收件人的传入邮件

php - Laravel 如何在 Eloquent 模型中添加自定义函数?

mysql - SQLSTATE[HY000] : General error: 1364 Field 'name' doesn't have a default value, Laravel

.htaccess - Laravel 访问

javascript - 将表单传递给 Controller

php - 如果 $_POST 是 "empty"或零,我如何检查 PHP?

javascript - 通过 JavaScript 将 JSON 数据发送到服务器

angularjs - 使用 Angular View 的 Laravel 5 密码重置

rest - Laravel Restful API - 如何基于多个参数创建自定义查询