Laravel- Jobs - 将 0 作为结果返回给模块内的控制器
Posted
技术标签:
【中文标题】Laravel- Jobs - 将 0 作为结果返回给模块内的控制器【英文标题】:Laravel- Jobs -returning 0 as result to controller inside a module 【发布时间】:2017-08-08 18:56:19 【问题描述】:我正在使用 laravel 5.4 并使用 nWidart/laravel-modules 来实现模块概念。
->创建了一个 controller ,通过我在 laravel 中使用作业概念调用 job 的控制器 我写了一个 post 方法,首先我在控制器中捕获它,然后将请求数组发送到作业以插入表中 该过程工作正常,如果我在作业中打印结果,则对象正在成功打印 但是当我将它返回给控制器时,它显示为“0”
-->然后我尝试返回一个正常的 字符串 仍然显示 0 作为控制器中的响应
我的控制器
public function store(Request $request)
$user = dispatch(new CheckJob($request));
return $user;
我的工作
public function __construct($requestParams)
$this->id = isset($requestParams['id']) ? $requestParams['id'] : null;
$this->firstName = isset($requestParams['firstName']) ? $requestParams['firstName'] : null;
$this->lastName = isset($requestParams['lastName']) ? $requestParams['lastName'] : null;
$this->email = isset($requestParams['emailId']) ? $requestParams['emailId'] : null;
/**
* Execute the job.
*
* @return void
*/
public function handle()
//
$user = User::firstOrNew(array('id' => $this->id));
$user->first_name = $this->firstName;
$user->last_name = $this->lastName;
$user->email = $this->email;
$user->save();
return $user;
当我在控制器中打印 $user 时,我得到“0”作为输出
【问题讨论】:
【参考方案1】:当我使用 php artisan 模块通过命令行创建作业时:make-job user
创建的文件是
class CheckJob implements ShouldQueue
由于它是实现 ShouldQueue 该函数充当 async 但是当我 删除 实现 ShouldQueue 时它会起作用作为 sync 并按预期返回 id
【讨论】:
是的,如果我没记错的话,您可以在创建作业时将 --sync 选项传递给 php artisan 以避免事后必须手动进行此更改。很高兴您设法解决了这个问题。【参考方案2】:其中很大一部分原因在于 Laravel 中的 Jobs 具有异步的潜力,并且通常以这种方式使用。如果您打算将ShouldQueue
与您的作业一起使用,则根本不可能将值返回给您的控制器(至少在没有非常hacky 的解决方案的情况下是不可能的)。如果您正在触发作业并立即返回,即同步返回,请删除 ShouldQueue
实现。从那里开始,从作业中返回数据会更简单,请查看此答案中的建议以了解一种可能的方法:
https://***.com/a/37335658/7086017
【讨论】:
谢谢你,Sheraz,所以工作是异步函数,所以有没有一种可能的方法来进行同步,以便我可以获得返回并使用用户对象移动到控制器中的下一行;在你告诉我的链接中,我试过但仍然得到 0 作为函数响应的响应以上是关于Laravel- Jobs - 将 0 作为结果返回给模块内的控制器的主要内容,如果未能解决你的问题,请参考以下文章