Skip to content

Commit dbb734f

Browse files
author
Robert Allport
authored
Support PHP ^8.0 and Laravel ^8.0 only (#30)
* PHP ^8.0 upgradel * Create GitHub Action to runs tests on supported platforms * Update README.md * Cache Composer dependencies
1 parent 538c19c commit dbb734f

File tree

6 files changed

+76
-178
lines changed

6 files changed

+76
-178
lines changed

.github/workflows/run-tests-laravel-8.yml

Lines changed: 0 additions & 44 deletions
This file was deleted.

.github/workflows/run-tests-laravel-9.yml

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: run-tests-laravel-7
1+
name: "Run Tests - Current"
22

33
on: [push, pull_request]
44

@@ -9,26 +9,33 @@ jobs:
99
strategy:
1010
fail-fast: false
1111
matrix:
12-
php: [8.0, 7.4]
13-
laravel: [7.*, 6.*]
12+
php: [8.3, 8.2, 8.1, 8.0]
13+
laravel: ["^10.0", "^9.0", "^8.12"]
1414
dependency-version: [prefer-lowest, prefer-stable]
1515
include:
16-
- laravel: 7.*
17-
testbench: 5.*
18-
- laravel: 6.*
19-
testbench: 4.*
16+
- laravel: "^10.0"
17+
testbench: 8.*
18+
- laravel: "^9.0"
19+
testbench: 7.*
20+
- laravel: "^8.12"
21+
testbench: "^6.23"
22+
exclude:
23+
- laravel: "^10.0"
24+
php: 8.0
25+
- laravel: "^8.12"
26+
php: 8.3
2027

2128
name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.dependency-version }}
2229

2330
steps:
2431
- name: Checkout code
25-
uses: actions/checkout@v3
32+
uses: actions/checkout@v4
2633

2734
- name: Cache dependencies
2835
uses: actions/cache@v3
2936
with:
3037
path: ~/.composer/cache/files
31-
key: dependencies-laravel-${{ matrix.laravel }}-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
38+
key: dependencies-laravel-${{ matrix.laravel }}-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
3239

3340
- name: Setup PHP
3441
uses: shivammathur/setup-php@v2
@@ -43,4 +50,4 @@ jobs:
4350
composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction
4451
4552
- name: Execute tests
46-
run: vendor/bin/phpunit --color=always tests
53+
run: vendor/bin/phpunit

README.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
11
![](https://banners.beyondco.de/Laravel%20API%20Response%20Helpers.png?theme=light&packageManager=composer+require&packageName=f9webltd%2Flaravel-api-response-helpers&pattern=brickWall&style=style_1&description=Generate+consistent+API+responses+for+your+Laravel+application&md=1&showWatermark=0&fontSize=100px&images=code)
22

3-
[![run-tests](https://img.shields.io/github/workflow/status/f9webltd/laravel-api-response-helpers/run-tests?style=flat-square)](https://github.com/f9webltd/laravel-api-response-helpers/actions)
3+
[![Tests](https://github.com/f9webltd/laravel-api-response-helpers/actions/workflows/run-tests.yml/badge.svg)](https://github.com/f9webltd/laravel-api-response-helpers/actions/workflows/run-tests.yml)
44
[![Packagist Version](https://img.shields.io/packagist/v/f9webltd/laravel-api-response-helpers?style=flat-square)](https://packagist.org/packages/f9webltd/laravel-api-response-helpers)
5-
[![Packagist PHP Version](
6-
https://img.shields.io/packagist/php-v/f9webltd/laravel-api-response-helpers?style=flat-square)](https://packagist.org/packages/f9webltd/laravel-api-response-helpers)
5+
[![Total Downloads](https://poser.pugx.org/f9webltd/laravel-api-response-helpers/downloads.png)](https://packagist.org/packages/f9webltd/laravel-api-response-helpers)
6+
[![Packagist PHP Version](https://img.shields.io/packagist/php-v/f9webltd/laravel-api-response-helpers?style=flat-square)](https://packagist.org/packages/f9webltd/laravel-api-response-helpers)
77
[![Packagist License](https://img.shields.io/packagist/l/f9webltd/laravel-api-response-helpers?style=flat-square)](https://packagist.org/packages/f9webltd/laravel-api-response-helpers)
88

9-
109
# Laravel API Response Helpers
1110

1211
A simple package allowing for consistent API responses throughout your Laravel application.
1312

1413
## Requirements
1514

16-
- PHP `^7.4 | ^8.0`
17-
- Laravel 6, 7, 8, 9 or 10
15+
- PHP `^8.0`
16+
- Laravel `^8.12`, `^9.0` or `^10.0`
1817

19-
## Installation / Usage
18+
### Legacy Support
2019

21-
`composer require f9webltd/laravel-api-response-helpers`
20+
For PHP `^7.4` and Laravel `^6.0` / `^7.0` support, use package version [`^1.5`](https://github.com/f9webltd/laravel-api-response-helpers/tree/1.5.3)
2221

22+
## Installation / Usage
23+
24+
```bash
25+
composer require f9webltd/laravel-api-response-helpers
26+
```
2327

2428
Simply reference the required trait within your controller:
2529

@@ -171,6 +175,7 @@ If you discover any security related issues, please email [email protected] instea
171175
## Credits
172176

173177
- [Rob Allport](https://github.com/ultrono) for [F9 Web Ltd.](https://www.f9web.co.uk)
178+
- [All Contributors](https://github.com/f9webltd/laravel-api-response-helpers/graphs/contributors)
174179

175180
## License
176181

composer.json

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,12 @@
1717
}
1818
],
1919
"require": {
20-
"php": "^7.4 | ^8.0",
21-
"illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0",
22-
"ext-json": "*"
20+
"php": "^8.0",
21+
"illuminate/support": "^8.12|^9.0|^10.0"
2322
},
2423
"require-dev": {
25-
"orchestra/testbench": "^4.0|^5.0|^6.0|^7.0|^8.0",
26-
"phpunit/phpunit": "^9.0|^9.5"
24+
"orchestra/testbench": "^6.23|^7.0|^8.0",
25+
"phpunit/phpunit": "^9.4"
2726
},
2827
"autoload": {
2928
"psr-4": {

src/ApiResponseHelpers.php

Lines changed: 42 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -14,36 +14,30 @@
1414

1515
trait ApiResponseHelpers
1616
{
17-
private ?array $_api_helpers_defaultSuccessData = ['success' => true];
18-
19-
/**
20-
* @param string|\Exception $message
21-
* @param string|null $key
22-
*
23-
* @return \Illuminate\Http\JsonResponse
24-
*/
17+
private ?array $_api_helpers_defaultSuccessData = [
18+
'success' => true,
19+
];
20+
2521
public function respondNotFound(
26-
$message,
22+
string|Exception $message,
2723
?string $key = 'error'
2824
): JsonResponse {
2925
return $this->apiResponse(
30-
[$key => $this->morphMessage($message)],
31-
Response::HTTP_NOT_FOUND
26+
data: [$key => $this->morphMessage($message)],
27+
code: Response::HTTP_NOT_FOUND
3228
);
3329
}
3430

35-
/**
36-
* @param array|Arrayable|JsonSerializable|null $contents
37-
*/
38-
public function respondWithSuccess($contents = null): JsonResponse
39-
{
40-
$contents = $this->morphToArray($contents) ?? [];
31+
public function respondWithSuccess(
32+
array|Arrayable|JsonSerializable|null $contents = null
33+
): JsonResponse {
34+
$contents = $this->morphToArray(data: $contents) ?? [];
4135

4236
$data = [] === $contents
4337
? $this->_api_helpers_defaultSuccessData
4438
: $contents;
4539

46-
return $this->apiResponse($data);
40+
return $this->apiResponse(data: $data);
4741
}
4842

4943
public function setDefaultSuccessResponse(?array $content = null): self
@@ -54,90 +48,80 @@ public function setDefaultSuccessResponse(?array $content = null): self
5448

5549
public function respondOk(string $message): JsonResponse
5650
{
57-
return $this->respondWithSuccess(['success' => $message]);
51+
return $this->respondWithSuccess(contents: ['success' => $message]);
5852
}
5953

6054
public function respondUnAuthenticated(?string $message = null): JsonResponse
6155
{
6256
return $this->apiResponse(
63-
['error' => $message ?? 'Unauthenticated'],
64-
Response::HTTP_UNAUTHORIZED
57+
data: ['error' => $message ?? 'Unauthenticated'],
58+
code: Response::HTTP_UNAUTHORIZED
6559
);
6660
}
6761

6862
public function respondForbidden(?string $message = null): JsonResponse
6963
{
7064
return $this->apiResponse(
71-
['error' => $message ?? 'Forbidden'],
72-
Response::HTTP_FORBIDDEN
65+
data: ['error' => $message ?? 'Forbidden'],
66+
code: Response::HTTP_FORBIDDEN
7367
);
7468
}
7569

7670
public function respondError(?string $message = null): JsonResponse
7771
{
7872
return $this->apiResponse(
79-
['error' => $message ?? 'Error'],
80-
Response::HTTP_BAD_REQUEST
73+
data: ['error' => $message ?? 'Error'],
74+
code: Response::HTTP_BAD_REQUEST
8175
);
8276
}
8377

84-
/**
85-
* @param array|Arrayable|JsonSerializable|null $data
86-
*/
87-
public function respondCreated($data = null): JsonResponse
88-
{
78+
public function respondCreated(
79+
array|Arrayable|JsonSerializable|null $data = null
80+
): JsonResponse {
8981
$data ??= [];
82+
9083
return $this->apiResponse(
91-
$this->morphToArray($data),
92-
Response::HTTP_CREATED
84+
data: $this->morphToArray(data: $data),
85+
code: Response::HTTP_CREATED
9386
);
9487
}
95-
96-
/**
97-
* @param string|\Exception $message
98-
* @param string|null $key
99-
*
100-
* @return \Illuminate\Http\JsonResponse
101-
*/
88+
10289
public function respondFailedValidation(
103-
$message,
90+
string|Exception $message,
10491
?string $key = 'message'
10592
): JsonResponse {
10693
return $this->apiResponse(
107-
[$key => $this->morphMessage($message)],
108-
Response::HTTP_UNPROCESSABLE_ENTITY
94+
data: [$key => $this->morphMessage($message)],
95+
code: Response::HTTP_UNPROCESSABLE_ENTITY
10996
);
11097
}
11198

11299
public function respondTeapot(): JsonResponse
113100
{
114101
return $this->apiResponse(
115-
['message' => 'I\'m a teapot'],
116-
Response::HTTP_I_AM_A_TEAPOT
102+
data: ['message' => 'I\'m a teapot'],
103+
code: Response::HTTP_I_AM_A_TEAPOT
117104
);
118105
}
119106

120-
/**
121-
* @param array|Arrayable|JsonSerializable|null $data
122-
*/
123-
public function respondNoContent($data = null): JsonResponse
124-
{
107+
public function respondNoContent(
108+
array|Arrayable|JsonSerializable|null $data = null
109+
): JsonResponse {
125110
$data ??= [];
126-
$data = $this->morphToArray($data);
111+
$data = $this->morphToArray(data: $data);
127112

128-
return $this->apiResponse($data, Response::HTTP_NO_CONTENT);
113+
return $this->apiResponse(
114+
data: $data,
115+
code: Response::HTTP_NO_CONTENT
116+
);
129117
}
130118

131119
private function apiResponse(array $data, int $code = 200): JsonResponse
132120
{
133-
return response()->json($data, $code);
121+
return response()->json(data: $data, status: $code);
134122
}
135123

136-
/**
137-
* @param array|Arrayable|JsonSerializable|null $data
138-
* @return array|null
139-
*/
140-
private function morphToArray($data)
124+
private function morphToArray(array|Arrayable|JsonSerializable|null $data): ?array
141125
{
142126
if ($data instanceof Arrayable) {
143127
return $data->toArray();
@@ -150,11 +134,7 @@ private function morphToArray($data)
150134
return $data;
151135
}
152136

153-
/**
154-
* @param string|\Exception $message
155-
* @return string
156-
*/
157-
private function morphMessage($message): string
137+
private function morphMessage(string|Exception $message): string
158138
{
159139
return $message instanceof Exception
160140
? $message->getMessage()

0 commit comments

Comments
 (0)