Как я могу добавить заказ с POST-запросом в службу RESTful?

#php #rest #symfony #postman #restful-authentication

#php #rest #symfony #почтальон #restful-аутентификация

Вопрос:

Я пытаюсь добавить заказ для панели клиента с аутентификацией JWT. Я активировал авторизацию, добавил параметры в теле в Postman и отправил его, но «статус»: 422,»ошибки»: «Заказ недействителен»} выдает это сообщение, а файл dev.log находится ниже.

 [2020-08-24T10:31:01.791369 02:00] request.INFO: Matched route "order_apiorders_add". {"route":"order_apiorders_add","route_parameters":{"_route":"order_apiorders_add","_controller":"App\Controller\OrderController::addOrder"},"request_uri":"http://localhost:8000/api/orders","method":"POST"} []
[2020-08-24T10:31:01.823528 02:00] security.DEBUG: Checking for guard authentication credentials. {"firewall_key":"api","authenticators":1} []
[2020-08-24T10:31:01.823621 02:00] security.DEBUG: Checking support on guard authenticator. {"firewall_key":"api","authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.823697 02:00] security.DEBUG: Calling getCredentials() on guard authenticator. {"firewall_key":"api","authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.836138 02:00] security.DEBUG: Passing guard token information to the GuardAuthenticationProvider {"firewall_key":"api","authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.937527 02:00] doctrine.DEBUG: SELECT t0.id AS id_1, t0.username AS username_2, t0.password AS password_3 FROM user t0 WHERE t0.username = ? LIMIT 1 ["admin"] []
[2020-08-24T10:31:01.949440 02:00] security.INFO: Guard authentication successful! {"token":{"Lexik\Bundle\JWTAuthenticationBundle\Security\Authentication\Token\JWTUserToken":"JWTUserToken(user="admin", authenticated=true, roles="ROLE_USER")"},"authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.950400 02:00] security.DEBUG: Guard authenticator set no success response: request continues. {"authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.950461 02:00] security.DEBUG: Remember me skipped: it is not configured for the firewall. {"authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.966109 02:00] doctrine.DEBUG: "START TRANSACTION" [] []
[2020-08-24T10:31:01.967877 02:00] doctrine.DEBUG: INSERT INTO order (product_id, quantity, address, shipping_date, user_id) VALUES (?, ?, ?, ?, ?) {"1":1,"2":1,"3":"Levent","4":20,"5":32} []
[2020-08-24T10:31:01.971845 02:00] doctrine.DEBUG: "ROLLBACK" [] []
  

У меня есть два класса сущностей, которые являются User и Order, а переменными пользователя являются «username, password,orders (переменная orders имеет отношение OneToMany и mappedBy =»user»). Переменными заказа являются «ProductID, количество, адрес, дата отправки и пользователь (пользователь имеет отношение ManyToOne и inversedBy =»заказы»)

Моя функция addOrder приведена ниже,

 /**
 * @param Request $request
 * @param TokenStorageInterface $tokenStorage
 * @return JsonResponse
 * @Route("/orders", name="orders_add", methods={"POST"})
 */
public function addOrder(Request $request,TokenStorageInterface $tokenStorage)
{
    $entityManager = $this->getDoctrine()->getManager();

    try{
        $request = $this->transformJsonBody($request);

        if (!$request || !$request->request->get('productId') || !$request->request->get('quantity') || !$request->request->get('address') || !$request->request->get('shippingDate')){
            throw new Exception();
        }

        $user = $tokenStorage->getToken()->getUser();
        $order = new Order();

        $order->setProductId($request->get('productId'));
        $order->setQuantity($request->get('quantity'));
        $order->setAddress($request->get('address'));
        $order->setShippingDate($request->get('shippingDate'));
        $order->setUser($user);
        $entityManager->persist($order);
        $entityManager->flush();


        $data = [
            'status' => 200,
            'success' => "Order added successfully",
        ];
        return $this->response($data);

    }catch (Exception $e){
        $data = [
            'status' => 422,
            'errors' => "Order no valid",

        ];
        return $this->response($data, 422);
    }
}
  

Кроме того, ссылка на репозиторий github являетсяhttps://github.com/Berkayermis/RESTfulService

Я прочитал много статей и поговорил со многими людьми, но я изучаю REST API с прошлого месяца, и я очень новичок в этой теме, но я хочу ее изучить.

Спасибо

Комментарии:

1. поскольку у вас возникло исключение, рассматривали ли вы возможность его регистрации или вывода?!!! может быть, в этом есть что-то вроде «ОШИБКА MYSQL blablabla»

2. То, что сказал @ Jakumi выше. Эмпирическое правило: всякий раз, когда вы обнаруживаете неизвестное исключение, регистрируйте его с помощью $logger->critical(....) . Вы поблагодарите себя позже…

3. Здравствуйте, я сделал это, и появляется это сообщение об ошибке: «errorInfo»: [ «42000», 1064, » У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который следует использовать рядом со ЗНАЧЕНИЯМИ ‘order (product_id, количество, адрес, shipping_date, user_id) (1, 1, ‘…’ в строке 1″]