我在一个页面上有两个表单,它们都通过 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/