I’m working with a Laravel 8 project and have created a Job that gets processed. I’ve got several functions to extract functionality but am getting the following error:
Cannot pass parameter 1 by reference
The trace is initially saying on line 65, which would be 'title' => $page->header ?? "Page $key"
but I’m not sure what I’m missing here?
My attached job is:
JavaScript
x
<?php
namespace AppJobs;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldBeUnique;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use IlluminateSupportFacadesHttp;
use AppModelsBeam;
use AppModelsBeamData;
use AppJobsFetchBeamData;
use CarbonCarbon;
use GuzzleHttpClient;
use IlluminateSupportFacadesLog;
class FetchBeamData implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/*
** Beam whose data should be linked to
*/
protected $beam;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($beam)
{
$this->beam = $beam;
}
/**
* Beam content schema
*/
protected function formatBeamContent($data)
{
$pages = $this->formatBeamPages($data);
return [
'css' => $data->css ?? null,
'notification' => $data->notification ?? null,
'pages' => $pages ?? []
];
}
/**
* Beam content pages
*/
protected function formatBeamPages($data)
{
$pages = [];
if (!$data->lenders || count($data->lenders) <= 0) {
return $pages;
}
foreach ($data->lenders as $key => $page) {
array_push([
'title' => $page->header ?? "Page $key",
'content' => $page->names ? json_encode($page->names) : null
]);
}
return $pages;
}
/**
* Get Beam
*/
public function getBeam()
{
$beam = Beam::where('id', $this->beam->id)->first();
return $beam;
}
/**
* Get Beam data
*/
public function getBeamData()
{
try {
$res = Http::timeout(120)->get($this->beam->url);
return json_decode($res->body());
} catch (Exception $e) {
return [];
}
}
/**
* Save Beam data
*/
public function saveBeamData()
{
$fetched = $this->getBeamData();
$fetched = $this->formatBeamContent($fetched);
try {
$beamData = new BeamData;
$beamData->user_id = $this->beam->user_id;
$beamData->beam_id = $this->beam->id;
$beamData->notification = $fetched['notification'] ?? null;
$beamData->beam_content = $fetched ? json_encode($fetched) : null;
$beamData->save();
} catch (Exception $e) { }
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
if (!$this->getBeam()) {
return;
}
$this->saveBeamData();
}
}
Advertisement
Answer
Not sure about the error but you didn’t provide your array to array_push method
it should be
JavaScript
foreach ($data->lenders as $key => $page) {
array_push($pages, [
'title' => $page->header ?? "Page $key",
'content' => $page->names ? json_encode($page->names) : null
]);
}