]> BookStack Code Mirror - bookstack/blob - app/Http/ApiController.php
Copying: Fixed issue with non-page links to page permalinks
[bookstack] / app / Http / ApiController.php
1 <?php
2
3 namespace BookStack\Http;
4
5 use BookStack\Api\ListingResponseBuilder;
6 use Illuminate\Database\Eloquent\Builder;
7 use Illuminate\Http\JsonResponse;
8
9 abstract class ApiController extends Controller
10 {
11     /**
12      * The validation rules for this controller.
13      * Can alternative be defined in a rules() method is they need to be dynamic.
14      *
15      * @var array<string, array<string, string[]>>
16      */
17     protected array $rules = [];
18
19     /**
20      * Provide a paginated listing JSON response in a standard format
21      * taking into account any pagination parameters passed by the user.
22      */
23     protected function apiListingResponse(Builder $query, array $fields, array $modifiers = []): JsonResponse
24     {
25         $listing = new ListingResponseBuilder($query, request(), $fields);
26
27         foreach ($modifiers as $modifier) {
28             $listing->modifyResults($modifier);
29         }
30
31         return $listing->toResponse();
32     }
33
34     /**
35      * Get the validation rules for this controller.
36      * Defaults to a $rules property but can be a rules() method.
37      */
38     public function getValidationRules(): array
39     {
40         return $this->rules();
41     }
42
43     /**
44      * Get the validation rules for the actions in this controller.
45      * Defaults to a $rules property but can be a rules() method.
46      */
47     protected function rules(): array
48     {
49         return $this->rules;
50     }
51 }