generated from liutk/owl-admin-base
0.5
parent
c77fed7b65
commit
e9d9633f42
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Traits\PaginatorTrait;
|
||||
use App\Models\Ad;
|
||||
use App\Models\Filters\AdFilter;
|
||||
use App\Http\Resources\AdResource;
|
||||
|
||||
class AdController extends Controller
|
||||
{
|
||||
use PaginatorTrait;
|
||||
|
||||
public function index(Request $request){
|
||||
$query = Ad::filter($request->all(), AdFilter::class)->sort();
|
||||
$list = $query->paginate($this->resolvePerPage('per_page', 20));
|
||||
|
||||
return $this->json(AdResource::collection($list));
|
||||
}
|
||||
}
|
||||
|
|
@ -2,11 +2,13 @@
|
|||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Traits\JsonResponse;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
|
||||
class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, ValidatesRequests;
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests, JsonResponse;
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class AdResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'resource_url' => $this->resource_url,
|
||||
'jump_type' => $this->jump_type,
|
||||
'jump_config' => $this->jump_config,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -49,8 +49,8 @@ class Ad extends Model
|
|||
{
|
||||
return [
|
||||
self::TYPE_WEB => '网页跳转',
|
||||
self::TYPE_APP => '应用跳转',
|
||||
self::TYPE_MINI => '小程序跳转',
|
||||
// self::TYPE_APP => '应用跳转',
|
||||
// self::TYPE_MINI => '小程序跳转',
|
||||
self::TYPE_OFF => '无跳转',
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
namespace App\Traits;
|
||||
|
||||
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
trait JsonResponse
|
||||
{
|
||||
public function json($data, $code = 200, $message = '')
|
||||
{
|
||||
$meta = null;
|
||||
if ($data instanceof AnonymousResourceCollection) {
|
||||
$resource = $data->resource;
|
||||
if ($resource instanceof LengthAwarePaginator) {
|
||||
$meta = [
|
||||
'current_page' => $resource->currentPage(),
|
||||
'last_page' => $resource->lastPage(),
|
||||
'per_page' => $resource->perPage(),
|
||||
'total' => $resource->total(),
|
||||
];
|
||||
}
|
||||
}
|
||||
$result = ['data' => $data, 'code' => $code, 'message' => $message];
|
||||
if ($meta) {
|
||||
$result['meta'] = $meta;
|
||||
}
|
||||
return response()->json($result);
|
||||
}
|
||||
|
||||
public function success($message = '', $data = null)
|
||||
{
|
||||
return $this->json($data, 200, $message);
|
||||
}
|
||||
|
||||
public function error($message = '', $code = 400, $data = null)
|
||||
{
|
||||
return $this->json($data, $code, $message);
|
||||
}
|
||||
|
||||
public function include($include = [], $key = 'include')
|
||||
{
|
||||
$request = request();
|
||||
if ($request->filled($key)) {
|
||||
$include1 = $request->input($key);
|
||||
$include1 = is_array($include1) ? $include1 : explode(',', $include1);
|
||||
$include = array_merge($include, $include1);
|
||||
}
|
||||
return $include;
|
||||
}
|
||||
|
||||
protected function user($guard = null)
|
||||
{
|
||||
return Auth::guard($guard)->user();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Traits;
|
||||
|
||||
trait PaginatorTrait
|
||||
{
|
||||
/**
|
||||
* 解析每页显示的条数
|
||||
*
|
||||
* @param string $perPageName
|
||||
* @param int $default
|
||||
* @param int|null $max
|
||||
* @return int
|
||||
*/
|
||||
public function resolvePerPage(string $perPageName = 'per_page', int $default = 20, ?int $max = null): int
|
||||
{
|
||||
$perPage = (int) request()->input($perPageName);
|
||||
|
||||
if ($perPage >= 1) {
|
||||
if ($max !== null && $max >= 1 && $perPage >= $max) {
|
||||
return $max;
|
||||
}
|
||||
|
||||
return $perPage;
|
||||
}
|
||||
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
|
|
@ -17,3 +17,7 @@ use Illuminate\Support\Facades\Route;
|
|||
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
|
||||
return $request->user();
|
||||
});
|
||||
|
||||
Route::middleware('api')->group(function () {
|
||||
Route::get('/ads', [App\Http\Controllers\Api\AdController::class, 'index']);
|
||||
});
|
||||
Loading…
Reference in New Issue