как получить данные сообщения из полей ввода массива в getParams() в SLIM PHP

у меня есть форма с некоторыми полями ввода массива, такими как name[],age[],gender[] и т. д., и я пытаюсь получить доступ к данным публикации в slim php с помощью функции, использующей

$name = $request->getParam('name');

но я не получаю никаких данных. Любая помощь будет оценена по достоинству. Заранее спасибо.


person Saikat Bepari    schedule 21.09.2017    source источник
comment
Вы можете передать данные как объект JSON. Для получения дополнительной информации посмотрите ответ ниже.   -  person Jino Shaji    schedule 21.09.2017


Ответы (3)


Если вы хотите передать массив объектов, вы можете добиться того же, передав значение в формате JSON.

Например: мой пример формата JSON выглядит следующим образом.

{
    "news_title": "Title",
    "news_description": "news_description",
     "news_date": "03-12-2017",
        "image_list": [
                {
                    "imagedata": "data",
                     "fileName": "Imags12.png" 
                },
                {
                    "imagedata": "data",
                     "fileName": "Imags11.png" 
                }

            ]
}

Вы можете прочитать эти JSON данные в slim, как описано ниже.

$app->post('/create_news_json', function () use ($app) {
    $json = $app->request->getBody();
    $data = json_decode($json, true); // parse the JSON into an assoc. array
    $news_title=$data['news_title']; // to retrieve value from news_title
    $news_description=$data['news_description']; // to retrieve value from news_description
    $news_date = date_format(date_create($data['news_date']),"Y-m-d");  // to 
    retrieve value from news_date and convert the date into Y-m-d format

    $news_ImageList=$data['image_list']; //read image_list array
    $arr_length=count($data['image_list']);//calculate the length of the array.
     // trace each elements in image_list array as follows.
     for($i=0;$i<count($news_ImageList);$i++) 
     { 
      $imagedata = $news_ImageList[$i]['imagedata']; //read image_list[].imagedata  element
      $filename = $news_ImageList[$i]['fileName']; //read image_list[].fileName element
     }

});

В почтальоне вы можете передать объект JSON как данные строки в формате application/json в разделе тела.

Используя эту концепцию, любые сложные структуры данных могут быть переданы в Slim как объект JSON. Это может выполнить большинство ваших целей передачи данных.

person Jino Shaji    schedule 21.09.2017
comment
как мне создать JSON для моей формы? - person Saikat Bepari; 21.09.2017
comment
Перейдите по ссылке. - person Jino Shaji; 21.09.2017
comment
$data = json_decode($json, правда); выдает ошибку Предупреждение: json_decode() ожидает, что параметр 1 будет строкой, задан массив - person Saikat Bepari; 21.09.2017
comment
Просто покажите свое значение в переменной $json, отобразив его с помощью echo $json - person Jino Shaji; 21.09.2017
comment
Примечание. Преобразование массива в строку в C:\xampp\htdocs\etourist\classes\saikatbepari\callables\AuthenticationCallable.php в строке 28 Массив - person Saikat Bepari; 21.09.2017
comment
но когда я использую: - person Saikat Bepari; 21.09.2017
comment
$json = $request->getParsedBody(); print_r ($ json); - person Saikat Bepari; 21.09.2017
comment
я получаю эту строку массива: Array ([showId] => 1 [noOfTickets] => 2 [name] => Array ([0] => Saikat Bepari [1] => Sai) [gender] => Array ([0 ] =› мужчина [1] =› мужчина ) [возраст] =› Массив ( [0] =› 25 [1] =› 23 ) [национальность] =› Массив ( [0] =› Индеец [1] =› Индеец ) [idProofType] => Массив ( [0] => Индийский ) [idNo] => Массив ( [0] => 5555 ) [адрес] => eee [город] => ddddd [штат] => sssss [страна] =› Индия [email] =› [email protected] [мобильный] =› 9476012711 [emergencyMobile] =› 9476012713 ) - person Saikat Bepari; 21.09.2017
comment
Как вы отправляете этот массив в тонкий API из своей формы? Вы преобразовали этот массив в JSON перед отправкой в ​​тонкий API? - person Jino Shaji; 21.09.2017
comment
var formData = JSON.stringify($form.serializeArray()); $.ajax({тип: POST, url: $form.attr('action'), данные: formData, успех: function(result){ console.log(result); }, dataType: json, contentType: application/json }); - person Saikat Bepari; 22.09.2017
comment
Давайте продолжим обсуждение в чате. - person Jino Shaji; 22.09.2017

Похоже, у вас есть общее представление, но после просмотра документации. Похоже, вам нужно использовать помощников Slim для почтовых данных. Это пример, который отображается в документации для получения значений title и description. Как упоминалось ниже, filter_var() не является обязательным, но настоятельно рекомендуется и является хорошей практикой для добавления дополнительного уровня защиты путем удаления любых специальных символов, которые могут нанести вред.

$app->post('/ticket/new', function (Request $request, Response $response) {
    $data = $request->getParsedBody();
    $ticket_data = [];
    $ticket_data['title'] = filter_var($data['title'], FILTER_SANITIZE_STRING);
    $ticket_data['description'] = filter_var($data['description'], FILTER_SANITIZE_STRING);
    // ...

https://www.slimframework.com/docs/tutorial/first-app.html, это ссылка на пример, если вы хотите узнать больше об этом.

person Javier    schedule 21.09.2017
comment
Вы можете отредактировать свой правильный ответ и объяснить, что шаг filter_var() является необязательным (но рекомендуется во многих случаях). - person Benni; 21.09.2017

Вы можете получить доступ к данным формы, отправленным html-формой, с помощью

$name=$req->getParsedBodyParam("name");
person Ramy hakam    schedule 21.09.2017