как разместить несколько записей ассоциативного массива в почтальоне и как получить к нему доступ в контроллере laravel - PullRequest
1 голос
/ 23 октября 2019

Я новичок в laravel, а также создаю успокоительные API.

Я хочу отправить array из product_id и product_amount. В этом массиве может быть несколько записей о товарах, array{ product_id: 1 product_amount: 1000 , product_id: 2 product_amount: 5000}, как это. Я хочу отправить этот ассоциативный массив в контроллер через API, а в контроллере я хочу получить доступ к этому массиву с его полями.

Я прошел через некоторые онлайн-решения, но это не решило мою проблему. Как и для массива сообщений почтальона:

$ass_array = array(
   “product_id” => “1”, 
   “product_amount” => “1000”
);

мы должны упомянуть

 key: array[product_id] , value: 1

key: array[product_amount] , value: 1000

В этом случае, если я добавлю другую запись, ее не будет отображаться на почтальоне. Как я могу разместить несколько записей через ассоциативный массив на контроллер?

Также я проверил, что мы можем получить доступ к массиву с помощью dot operator в контроллере. Но я не знаю, как я могу сделать это в моем случае?

Пожалуйста, руководство. заранее спасибо

1 Ответ

0 голосов
/ 23 октября 2019

Итак, сначала вам нужно создать новый контроллер с помощью команды php artisan make:controller. В моем случае я называю это ArrayApiController (я уверен, что вы найдете лучшее имя).

Итак, моя команда выглядит так:

php artisan make:controller ArrayApiController

Теперь выиметь новый контроллер для обработки вашего входящего запроса. После этого нам нужно создать новый маршрут для перенаправления запросов на этот новый контроллер.

Для этого мы добавляем новую запись в файл api.php в routes/api.php. Я предлагаю добавить относящиеся к API маршруты в api.php, чтобы сохранить его в чистоте и порядке.

Поэтому добавьте эту строку в файл routes/api.php:

Route::post('array', 'ArrayApiController@post');

Вы можете изменить ::post на ваш предпочитаемый метод http и URL (array в моем случае) на все, что вы хотите ( Вот все доступные методы http ).

Так что запросы на /api/array будуттеперь перейдем к функции post в ArrayApiController, который мы создали ранее.

Итак, теперь создайте новую функцию с именем post в новом контроллере (ArrayApiController в моем случае):

public function post(Request $request)
{
  //
}

Теперь вы можете получить отправленные данные, используя $request->get(NAME_OF_THE_DATA). В следующем фрагменте кода вы можете видеть, что я взял products в качестве названия переменных продуктов, которые я отправляю почтальону.

public function post(Request $request)
{
    // get all products
    $products = $request->get('products');
}

Теперь вы можете перебирать свои продукты и делать все, что захотите (Вв моем случае это просто разоблачить, но вы также можете записать эти переменные в БД):

public function post(Request $request)
{
    // get all products
    $products = $request->get('products');

    // loop through all products
    foreach ($products as $product) {
        echo $product['product_id'];
        echo $product['product_amount'];
    }
}

Теперь перейдите к почтальону и создайте новый запрос. Измените метод http на введенный вами метод в файле api.php (в моем случае я добавил Route::post(.. в файл api.php, поэтому мне нужно создать запрос POST). Затем добавьте новый заголовок с именем Content-Type и установите его на application-json. Теперь в качестве тела вы можете отправить свой массив как json:

{

  // You can call the variable how you want
  "products": [
    {
        "product_id": 1,
        "product_ammount": 500
    },
    {
        "product_id": 2,
        "product_ammount": 1500
    }
  ]
}

Убедитесь, что тип содержимого вашего тела - json.

Вместо products вы можете взять то, что вы хотите, ноон должен быть таким же, как в ArrayApiController в указанном выражении $request->get().

Если вы хотите добавить аутентификацию в API или получить дополнительную информацию об этом, вот хорошая ссылка -> BuildRESTful API в Laravel 5.8 Пример .


Теперь, как вам нужно сделать запрос почтальона:

screenshot; postman header settings

screenshot; postman body content

...