scramble
scramble copied to clipboard
Response Body Returning String when using ApiResponser Trait
Hello All I use scamble version 0.11.13 with Laravel 11. When I build an API, I always create an ApiResponser Trait to keep my API response consistent.
Such as:
{
success: boolean,
data: array,
message: string
}
I create ApiResponser.php trait
<?php
namespace App\Traits;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
trait ApiResponser
{
/**
* Building success response
*
* @param string|array $data
* @param ?string $message
* @param int $code
* @return JsonResponse
*/
public function successResponse($data, $message = null, $code = Response::HTTP_OK)
{
return response()->json([
'success' => true,
'data' => $data,
'message' => $message,
], $code);
}
}
and then I used in Controller.php
<?php
namespace App\Http\Controllers;
use App\Traits\ApiResponser;
abstract class Controller
{
use ApiResponser;
}
In another controller, example AuthController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\JsonResponse;
use App\Http\Requests\Auth\LoginRequest;
use Illuminate\Validation\ValidationException;
class AuthController extends Controller
{
/**
* Login
*
* @unauthenticated
*
* @throws ValidationException
*/
public function login(LoginRequest $request): JsonResponse
{
// LOGIC
return $this->successResponse([
'token' => 'blablabla',
'token_type' => 'Bearer',
], __('Login successful'));
}
}
The expected Response Body in scramble is
{
"success": boolean,
"data": {
"token": string,
"token_type": string
},
"message": string
}
But response body in scramble is string
Is there something wrong with me? Or how should I return API responses with a consistent format? Thank you