Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Как обработать POST запрос в контроллере?


Recommended Posts

15 минут назад, shemm11 сказал:

Доброго времени суток. Прочитал немного статей, но так и не понял как получить POST запрос в контроллере. 

$this->request->post['page']

  • +1 1
Надіслати
Поділитися на інших сайтах


Ну так я сам еще особо не понял куда мне это нужно добавить. У меня есть модуль по роуту index.php?route=extension/module/cron_novelty . По примеру выше я добавил if, но у меня выходит эта ошибка в постман:

<b>Notice</b>: Undefined index: page in
<b>\catalog\controller\extension\module\cron_novelty.php</b> on line
<b>5</b>

Когда ставлю просто 

 if($this->request->post){
             $json = array();
            $json['error'] = $this->request;
            $this->response->addHeader('Content-Type: application/json');
            $this->response->setOutput(json_encode($json));
        }

У меня выводит запрос. Но в нем пустой POST.

Змінено користувачем shemm11
Надіслати
Поділитися на інших сайтах


8 минут назад, shemm11 сказал:

Мне выводит пустой массив POST

В шаблоне должна быть форма <form action="{$link}" id="application-form" method="post" name="adminForm" class="form-validate">

или скрипт, типа (это не с опенкарта - скрипт создает дерево директорий с картинками, но сама суть в отправке узла методом POST и получения картинок в требуемой директории)

<script>
    $(document).ready(function(){ldelim}
var treeObj = $.fn.zTree.getZTreeObj("tree");
var node = treeObj.getNodeByTId("{$tid}");
jQuery.post("{$img_view}",
{ldelim}param: node.name{rdelim},
onAjaxSuccess);
function onAjaxSuccess(data){ldelim}$("#imgView").html(data);{rdelim}
        {rdelim});            
</script>

 

Надіслати
Поділитися на інших сайтах

19 минут назад, shemm11 сказал:

Вот мой запрос в postman

ну ясноже указано - нет переменной page. она то есть, только не передается в запросе

Надіслати
Поділитися на інших сайтах

46 минут назад, esculapra сказал:

ну ясноже указано - нет переменной page. она то есть, только не передается в запросе

Хорошо, а как её передать в запросе? Я не могу использовать Ajax т.к. этот контроллер будет принимать запросы не с фронта а с другого сервера.

Надіслати
Поділитися на інших сайтах


15 часов назад, shemm11 сказал:

Хорошо, а как её передать в запросе? Я не могу использовать Ajax т.к. этот контроллер будет принимать запросы не с фронта а с другого сервера.

ну вы же вроде передаете, только в формате  в json

$data = file_get_contents('php://input');
$data = json_decode($data, JSON_OBJECT_AS_ARRAY | JSON_UNESCAPED_UNICODE);
$page = $data['page'];

 

Надіслати
Поділитися на інших сайтах

10 часов назад, Blast сказал:

ну вы же вроде передаете, только в формате  в json


$data = file_get_contents('php://input');
$data = json_decode($data, JSON_OBJECT_AS_ARRAY | JSON_UNESCAPED_UNICODE);
$page = $data['page'];

 


У меня почему-то выходит data = null. Вот мой код контроллера, в функции индекс:

$json = array();
$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
$page = $data['page'];
$json['haha'] = "dsdsadsadasa";
$json['page'] = $page;
$this->log->write($raw);
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));

Вот что выводим мне POSTMAN:
 

{
    "haha": "dsdsadsadasa",
    "page": null
}


 

Надіслати
Поділитися на інших сайтах


43 минуты назад, shemm11 сказал:


У меня почему-то выходит data = null. Вот мой код контроллера, в функции индекс:


$json = array();
$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
$page = $data['page'];
$json['haha'] = "dsdsadsadasa";
$json['page'] = $page;
$this->log->write($raw);
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));

Вот что выводим мне POSTMAN:
 


{
    "haha": "dsdsadsadasa",
    "page": null
}


 

вставил ваш код, у меня работает

запрос точно послали с данными, как здесь?

В 07.10.2021 в 08:34, shemm11 сказал:

Вот мой запрос в postman

image.thumb.png.98259e946ac0bc8d307bacae4093ab32.png

 

  • +1 1
Надіслати
Поділитися на інших сайтах

1 час назад, Blast сказал:

вставил ваш код, у меня работает

запрос точно послали с данными, как здесь?

Да. Решил проверить тип запроса с помощью этого кода и мне выводит в лог GET. Хотя postman указан тип запроса post.

if ($this->request->server['REQUEST_METHOD'] == 'POST'){
    $this->log->write("POST");
} else{
    $this->log->write($this->request->server['REQUEST_METHOD']);
}

 

Надіслати
Поділитися на інших сайтах


1 час назад, shemm11 сказал:

Да. Решил проверить тип запроса с помощью этого кода и мне выводит в лог GET. Хотя postman указан тип запроса post.


if ($this->request->server['REQUEST_METHOD'] == 'POST'){
    $this->log->write("POST");
} else{
    $this->log->write($this->request->server['REQUEST_METHOD']);
}

 

метод значения не имеет. но несоответствие должно заставить задуматься, что где-то что-то вы напутали

34 минуты назад, shemm11 сказал:

Можете скинуть полный код контроллера? 

код один в один ваш, разве что вывод в лог убрал

	public function test() {
		$json = array();
		$raw = file_get_contents('php://input');
		$data = json_decode($raw, true);
		$page = $data['page'];
		$json['haha'] = "dsdsadsadasa";
		$json['page'] = $page;

		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}

 

  • +1 1
Надіслати
Поділитися на інших сайтах

та сделай в шабле <input type="hidden" id ="'page"  name="page" value="'.$var.'" />';<input >//$var - номер страницы или что хочешь

в запросе передай

{
    "haha": "dsdsadsadasa",
    "page": $('#page').val();
}
Надіслати
Поділитися на інших сайтах

19 часов назад, Blast сказал:

метод значения не имеет

имеет! если это get- запрос, то его (форму) можно присобачить к урлу, типа ссылка+$(/*id формы*/).serialize();

или в post-запрос $(/*id формы*/).serializeArray();// тогда передаются данные в виде массива объектов, а в контроллере лови реквест пост ( form) и сделай обход массива

{
   
     "form":$(/*id формы*/).serializeArray();
}
Надіслати
Поділитися на інших сайтах

1 час назад, esculapra сказал:

имеет! если это get- запрос, то его (форму) можно присобачить к урлу, типа ссылка+$(/*id формы*/).serialize();

или в post-запрос $(/*id формы*/).serializeArray();// тогда передаются данные в виде массива объектов, а в контроллере лови реквест пост ( form) и сделай обход массива


{
   
     "form":$(/*id формы*/).serializeArray();
}

не имеет! для получения данных, передаваемых в теле запроса, через

file_get_contents('php://input');

метод не важен.

 

вы тему читали? что вы лепите про html и ajax? человек ясно сказал, что у него будет интеграция со сторонним сервисом, который будет посылать запросы на его контроллер. Ни о каких input и сериализации данных речи нет

Надіслати
Поділитися на інших сайтах

2 часа назад, Blast сказал:

вы тему читали? что вы лепите про html и ajax? человек ясно сказал, что у него будет интеграция со сторонним сервисом, который будет посылать запросы на его контроллер. Ни о каких input и сериализации данных речи нет

политика безопасности в высших версиях запрещает функцию если не с родного сервера - пробуй через CURL

file_get_contents
Змінено користувачем esculapra
Надіслати
Поділитися на інших сайтах

2 часа назад, Blast сказал:

вы тему читали? что вы лепите про html и ajax? человек ясно сказал, что у него будет интеграция со сторонним сервисом, который будет посылать запросы на его контроллер. Ни о каких input и сериализации данных речи нет

то нехай читтчитает доки по апи

Надіслати
Поділитися на інших сайтах

Понял что была проблема в апачи, переключил на нджинкс и запросы стали нормально работать. Спасибо что помогли.

Змінено користувачем shemm11
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.