This is my controller and I'm strutting my switch here
class ProductController extends Controller public function __construct() { $this->middleware('auth:api'); } public function getdata() { $products = Product::get(); return view('table', [ 'products'=>$products ]); }
Here I get all the data from the database
/** * @return array<object string/int> * * * @OA\Get( * path="/api/products", * tags={"Products"}, * summary="Get all products", * description="For getting all datas should be pressed the button called 'try'", * operationId="index", * @OA\Parameter( * name="paginate", * in="query", * description="Status values that needed to be considered for filter", * required=true, * explode=true, * @OA\Schema( * default="10", * type="string", * ) * ), * @OA\Response( * response=200, * description="successful operation", * ), * security={{ "bearer": {} }} * ) */ public function index($paginate=10){ return UserResource::collection(Product::paginate($paginate)); }
Here I store data from swagger
/** * @OA\Post( * path="/api/products", * tags={"Products"}, * summary="Create a new type of item to the product", * operationId="store", * @OA\RequestBody( * description="Create a new item", * required=true, * @OA\MediaType( * mediaType="multipart/form-data", * @OA\Schema( * type="object", * @OA\Property( * property="name", * description="Give a new name to the product", * type="string", * ), * @OA\Property( * property="type", * description="Give a new type to the product", * type="string", * ), * @OA\Property( * property="price", * description="Give a new type to the product", * type="string", * ), * @OA\Property( * property="image", * description="Give a new type to the product", * type="file", * ), * ), * ), * ), * @OA\Response( * response=200, * description="successful operation", * ), * security={{ "bearer": {} }} * ) */ public function store(ProductRequest $request) { $request->validated(); if ($request->hasFile('image')) { $path = $request->file('image')->store('images', 'public'); $product = new Product; $product->image = $path; $product->name = $request->name; $product->type = $request->type; $product->price = $request->price; $product->save(); } return response()->json([ 'status' => 'success', 'message' => 'Product created successfully', 'products' => $product, ]); }
Here I just get the id of the selected element for display
/** * @OA\Get( * path="/api/product/{id}", * tags={"Products"}, * summary="Show the choosen element", * operationId="show", * @OA\Parameter( * name="id", * in="path", * description="Status values that needed to be considered for filter", * required=true, * explode=true, * @OA\Schema( * default="1", * type="string", * ) * ), * @OA\Response( * response=200, * description="successful operation", * ), * security={{ "bearer": {} }} * ) * */ public function show($id) { return UserResource::collection(Product::all()->keyBy->id); }
When I try to change existing data in the database, I always get an error like the following.
/** * @OA\Put( * path="/api/product/{id}/update", * tags={"Products"}, * summary="Update the choosen element", * operationId="update", * @OA\Parameter( * name="id", * in="path", * description="Status values that needed to be considered for filter", * required=true, * @OA\Schema( * type="string", * ) * ), * @OA\RequestBody( * description="Update a new item", * required=true, * @OA\MediaType( * mediaType="multipart/form-data", * @OA\Schema( * type="object", * @OA\Property( * property="name", * description="Update", * type="string", * ), * @OA\Property( * property="type", * description="Update", * type="string", * ), * @OA\Property( * property="price", * description="Update", * type="string", * ), * @OA\Property( * property="image", * description="Update", * type="file", * ), * ), * ), * ), * @OA\Response( * response=200, * description="successful operation", * ), * @OA\Response( * response=400, * description="Invalid user supplied" * ), * @OA\Response( * response=404, * description="User not found" * ), * security={{ "bearer": {} }} * ) * */ public function update(ProductRequest $request, $id){ /* Gate::authorize('update', $product); */ $product = Product::find($id); if ($request->hasFile('image')) { if (isset($product->image)) { Storage::delete($product->image); } $path = $request->file('image')->store('images', 'public'); } $product->update([ "name" => $request->name, "type" => $request->type, "price" => $request->price, "image" => $path ?? $product->image ]); return response()->json([ 'status' => 'success', 'message' => 'The choosen product updated successfully', 'product' => $product, ]); }
This error occurred in Swagger
Failed to obtain. possible reason: Cross-domain resource sharing network failure URL scheme must be "http" or "https" for cross-domain resource sharing request.
This error in Postman
"message": "The given data was invalid.", "errors": { "name": [ "The name field is required." ], "type": [ "The type field is required." ], "price": [ "The price field is required." ], "image": [ "The image field is required." ] }
Here I delete elements from the database
/** * @OA\Delete( * path="/api/product/{id}", * tags={"Products"}, * summary="Show the choosen element", * operationId="destroy", * @OA\Parameter( * name="id", * in="path", * description="Status values that needed to be considered for filter", * required=true, * explode=true, * @OA\Schema( * default="1", * type="string", * ) * ), * @OA\Response( * response=200, * description="successful operation", * ), * security={{ "bearer": {} }} * ) * */ public function destroy($id) { $product = Product::find($id); $product->delete(); return response()->json([ 'status' => 'success', 'message' => 'product deleted successfully', 'product' => $product, ]); }
}
P粉2486022982024-02-26 15:37:13
According to the postman error, it seems it cannot get the fields (name, type...) from the request. dd request the object and see what happens.