laravel5.2工作,如何返回数据?

时间:2016-03-12 12:16:00

标签: laravel-5.2

工作

class DataFormFields extends Job implements ShouldQueue
{
 use InteractsWithQueue, SerializesModels;

 protected $fieldList = [
        'name' => 'Tom',
        'age' => '20',
];
public function handle()
{
    $fields = $this->fieldList;

    return $fields;
}
}

控制器

public function create()
{
    $data = $this->dispatch(new DataFormFields());

    return view('create', $data);
}

我尝试dd($ data);打印0

代码可以在laravel5.1中运行,但是在5.2中它不是ok.help

5 个答案:

答案 0 :(得分:1)

Laravel5.2该类将实现Illuminate\Contracts\Queue\ShouldQueue接口,向Laravel指示作业应该被推送到队列而不是同步运行。 所以你应该像php artisan make:job fooJob --sync

那样工作

答案 1 :(得分:0)

我不认为您希望依赖dispatch()的返回,因为排队的作业可以将执行延迟一段任意时间,具体取决于您的实现。您可能想要考虑使用事件或回调。

https://laravel.com/docs/5.2/queues#job-events

或者,在句柄功能结束时,您可以执行以下操作:

call_user_func(['FormFieldsHandler', 'dataFormFieldsCallback'], $data]);

答案 2 :(得分:0)

获取这样的字段列表并不是Job的用例,因为handle()方法的返回值永远不会通过dispatch()方法返回到调用范围。 / p>

这似乎是最好留给服务或模型的东西。

以下是使用服务实现此目的的方法。

<?php

namespace App\Services;

class DataFieldService
{
    protected $fields = ['field_one', 'field_two'];

    public function getFields()
    {
        return $this->fields;
    }
}

在控制器......

<?php

namespace App\Http\Controllers;

use App\Services\DataFieldService;

class MyController
{
    // in Laravel, the IoC container will inject DataFieldService
    // for you automagically if you type hint it
    public function create(DataFieldService $dataFieldService)
    {
        $fields = $dataFieldService->getFields();
        return view('create', compact('fields'));
    }
}

显然,您可以充实DataFieldService以从数据库或其他东西获取字段。希望有所帮助!

答案 3 :(得分:0)

是的,你可以。只需返回值即可。您可以像这样调用作业的句柄,而不是调用调度。

public function handle()
    {
            $a = "return value";
            return $a;
    }
}

现在,而不是在控制器中调用$this->dispatch(new ExampleJob)。你可以这样做。

$exampleJob = new ExampleJob();
$retval = $exampleJob->handle();

echo $retval; //return value

请注意,只有在您不打算将作业排队时才有效。

答案 4 :(得分:0)

您无法从异步作业获得结果。当您从ShouldQueue接口实现时,这意味着您倾向于执行作业Async。您必须删除ShouldQueue才能执行同步作业以获得结果