I'm getting this error when making a broadcast. I'm working on Laravel (^9.11) and vue3. I broadcast a post detail after saving. Function here:
/**
* New blacklist record
*/
public function newBlacklistRecord(Request $request)
{
$requestData = $request->_value;
DB::beginTransaction();
try {
$newBlacklistRecord = new BlackList();
$newBlacklistRecord->who_created = auth()->user()->id;
$newBlacklistRecord->tc_identity_number = $requestData['tc_identity_number'];
$newBlacklistRecord->fullname = $requestData['fullname'];
$newBlacklistRecord->phone = $requestData['phone'];
$newBlacklistRecord->short_note = $requestData['short_note'];
$newBlacklistRecord->get_sms = strval($requestData['get_sms']['enum_value']);
$newBlacklistRecord->get_call = strval($requestData['get_call']['enum_value']);
$newBlacklistRecord->confirm_status = strval(ConfirmStatus::pending);
$newBlacklistRecord->save();
broadcast(new BlacklistRequest($newBlacklistRecord, auth()->user()))->toOthers();
} catch (Throwable $th) {
DB::rollback();
return response(
[
'status' => 'error',
'message' => $th->getMessage(),
'data' => $requestData,
],
200
);
}
DB::commit();
return response(
[
'status' => 'success',
'message' => __('successfully created'),
],
200
);
}
I read this post: Laravel: Unable to JSON encode payload. Error code: 5
I updated my method as follows:
/**
* New blacklist record
*/
public function newBlacklistRecord(Request $request)
{
$requestData = $request->_value;
DB::beginTransaction();
try {
$newBlacklistRecord = new BlackList();
$newBlacklistRecord->who_created = auth()->user()->id;
$newBlacklistRecord->tc_identity_number = $requestData['tc_identity_number'];
$newBlacklistRecord->fullname = $requestData['fullname'];
$newBlacklistRecord->phone = $requestData['phone'];
$newBlacklistRecord->short_note = $requestData['short_note'];
$newBlacklistRecord->get_sms = strval($requestData['get_sms']['enum_value']);
$newBlacklistRecord->get_call = strval($requestData['get_call']['enum_value']);
$newBlacklistRecord->confirm_status = strval(ConfirmStatus::pending);
$newBlacklistRecord->save();
$blacklist = [
'who_created' => GeneralHelper::detectAndFixEncoding($newBlacklistRecord->who_created),
'tc_identity_number' => GeneralHelper::detectAndFixEncoding($newBlacklistRecord->tc_identity_number),
'fullname' => GeneralHelper::detectAndFixEncoding($newBlacklistRecord->fullname),
'phone' => GeneralHelper::detectAndFixEncoding($newBlacklistRecord->phone),
'short_note' => GeneralHelper::detectAndFixEncoding($newBlacklistRecord->short_note),
'get_sms' => GeneralHelper::detectAndFixEncoding($newBlacklistRecord->get_sms),
'get_call' => GeneralHelper::detectAndFixEncoding($newBlacklistRecord->get_call),
'confirm_status' => GeneralHelper::detectAndFixEncoding($newBlacklistRecord->confirm_status),
];
broadcast(new BlacklistRequest($blacklist, auth()->user()))->toOthers();
} catch (Throwable $th) {
DB::rollback();
return response(
[
'status' => 'error',
'message' => $th->getMessage(),
'data' => $requestData,
],
(new FerisoftEnum)->getEnumValue('httpResponseStatusCode', 'ok')
);
}
DB::commit();
return response(
[
'status' => 'success',
'message' => __('successfully created'),
],
(new FerisoftEnum)->getEnumValue('httpResponseStatusCode', 'ok')
);
}
The GeneralHelper::detectAndFixEncoding()
method here is as follows:
/**
* Detect and Fix Encoding
*/
public static function detectAndFixEncoding($content)
{
$encoding = mb_detect_encoding($content, 'UTF-8, ISO-8859-1, WINDOWS-1252, WINDOWS-1251', true);
return $encoding != 'UTF-8' ? iconv($encoding, 'UTF-8//IGNORE', $content) : $content;
}
Also this is my Event
:
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class BlacklistRequest implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $blacklist;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($blacklist, $user)
{
$this->blacklist = $blacklist;
$this->user = $user;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('blacklist_request');
}
/**
* Broadcast as
*/
public function broadcastAs()
{
return 'blacklist_request';
}
}
I'm listening on the front like this with Pusher
:
window.Echo.private('blacklist_request').listen('.blacklist_request', (e) => {
console.log(e);
});