【问题标题】:job class is not accepting the argument send from controller in laravel作业类不接受从 laravel 控制器发送的参数
【发布时间】:2016-04-13 22:19:08
【问题描述】:

错误:正在显示 App\Jobs\ReorderDatabase::handle() 缺少参数 1, 我需要从控制器传递变量,我不需要使用模型, 所以我应该如何进行。

我的控制器功能代码在这里

    public function postData(Request $request)
    {

    $updateRecordsArray = Input::get('order');

    $this->dispatch(new ReorderDatabase($updateRecordsArray));

    return Response::json('Okay');
    }

我的工作 RecorderDatabase 工作代码是

<?php namespace App\Jobs;
 use App\Http\Requests\Request;
 use App\Jobs\Job;
 use Illuminate\Queue\SerializesModels;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 use App\Http\Controllers\DragDropController;

 /**
 * Class ReorderDatabase
 * @package App\Jobs
 */
class ReorderDatabase extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;

/**
 * Create a new job instance.
 *
 * @return void
 */
public function __construct()
{
}

/**
 * Execute the job.
 *
 * @return void
 */
public function handle($updateRecordsArray)
{
    $i = 1;

    foreach ($updateRecordsArray as $recordID) {


        DB::table('venues')->where('id', '=', $recordID)->update(array('priority' => $i));

        $i++;
     }
    }
  }

【问题讨论】:

  • 您没有将该数组作为参数传递给调度,它是您正在创建新实例的作业的构造函数的参数。
  • 我不知道怎么做,你能解释一下

标签: php laravel queue jobs laravel-5.2


【解决方案1】:

正如@lagbox 提到的,您需要将此参数传递给构造函数,而不是handle 方法。

您的工作类别应如下所示:

<?php namespace App\Jobs;
 use App\Http\Requests\Request;
 use App\Jobs\Job;
 use Illuminate\Queue\SerializesModels;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 use App\Http\Controllers\DragDropController;

 /**
 * Class ReorderDatabase
 * @package App\Jobs
 */
class ReorderDatabase extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;

protected $updateRecordsArray;

/**
 * Create a new job instance.
 *
 * @return void
 */
public function __construct($updateRecordsArray)
{
   $this->updateRecordsArray = $updateRecordsArray;
}

/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
    $i = 1;

    foreach ($this->updateRecordsArray as $recordID) {


        DB::table('venues')->where('id', '=', $recordID)->update(array('priority' => $i));

        $i++;
     }
    }
  }

【讨论】:

  • 当我运行 queue:listen 时,它显示为 foreach 提供的错误无效参数
  • @Vikash 然后你可以将$updateRecordsArray = Input::get('order'); 更改为$updateRecordsArray = (array) Input::get('order');
  • Nabialek 非常感谢,从过去 20 小时开始一直在敲我的头,缺乏基本知识,非常感谢,即使是基本的东西,我也很感激。
  • 您好!我遵循了这个并得到了这个错误BindingResolutionException in Container.php line 835: Unresolvable dependency resolving [Parameter #0 [ &lt;required&gt; $nid ]] in class Rogue\Jobs\SendReportbackToPhoenix。我还在使用 dispatch (dispatch(new ...` 而不是 $this-&gt;dispatch 的全局帮助程序,并且正在使用 Laravel 5.2。还有其他想法为什么会出现此错误?
  • 这仅适用于控制器,但关于通过 RedisDriver 使用构造函数参数调度作业的任何想法?
猜你喜欢
  • 2014-01-11
  • 2014-05-17
  • 1970-01-01
  • 2016-01-23
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多