@Sergey0808

Php Phalcon, как отправить данные в формате json?

Добрый вечер, есть такая задача:
Есть два сайта на локалхост. Нужно запросить и получить данные со второго сайта(первы запрашивает). Код действия котроллера первого сайта, который запрашивает:
public function acceptAction()
        {

            $json = file_get_contents("php://input");
            $receive_data = json_decode($json,true);
            $users = $receive_data;

            $this->view->users = $users;
       }


Код действия котроллера второго сайта, который отдаёт данные:
public function sendAction()
        {

            $users = Users::find();
            $send_data = json_encode($users);

            $curl = curl_init();
            curl_setopt($curl,CURLOPT_URL,"http://learning/test/accept");
            curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                'Accept: application/json',
                'Content-type: application/json')
            );
            curl_setopt($curl,CURLOPT_POST,true);
            curl_setopt($curl,CURLOPT_POSTFIELDS,$send_data);
            curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
            curl_setopt($curl,CURLOPT_HEADER,false);
            curl_exec($curl);

            curl_close($curl);
        }

Почему не приходят данные, помогите, плиз.
  • Вопрос задан
  • 857 просмотров
Решения вопроса 1
copist
@copist
Empower people to give
0. Убедитесь в /etc/hosts, что домен learning относится к хосту 127.0.0.1
1. Проверьте вручную через консольную команду curl на том же самом сервере, что http://learning/test/accept возвращает какой-либо ответ
2. Проверяйте логи веб-сервера
access.log - был ли вообще запрос между двумя скриптами
error.log - были ли ошибки
3. В код sendAction() замените код, чтобы увидеть ошибку
if( ! $result = curl_exec($curl)) // чтобы проверить на наличие ошибки CURL или HTTP
{
    trigger_error(curl_error($curl));
}
curl_close($curl);
echo $result; // чтобы видеть результат запроса

4. В коде acceptAction() добавьте код
$receive_data = json_decode($json,true);
if (json_last_error()) // чтобы проверить наличие ошибки декодирования JSON
{
    trigger_error(json_last_error_msg());
}


-------------

А вообще логика вашего скрипта какая?
Я вижу, что
1. Первый скрипт выбирает пользователей из базы (без лимита, это страшно на продакшене)
2. Этот список пользователей посылается запросом из public function sendAction() на http://learning/test/accept в формате JSON
3. Этот JSON декодируется и передаётся в $this->view->users
4. ... зачем?

-----------

Уточнённое решение

На одном сервере получить JSON и показать через шаблон
class TestController
{
    public function showAction()
    {
        $json = file_get_contents("http://learning/test/users"); // получить данные со второго сервера
        $users = json_decode($json, true);
        $this->view->users = $users; // передать в представление
    }
}


На втором сервере выбрать данные из базы и выдать в формате JSON
class TestController
{
    public function usersAction()
    {
        $users = Users::find(); // получить из базы

        // подготовиться к выдаче ответа в формате JSON
        $this->view->disable();
        $response = new \Phalcon\Http\Response();
        $response->setStatusCode(200);
        $response->setJsonContent($users);
        $response->setContentType('application/json', 'UTF-8');
        return $response;
    }
}


По идее первый должен показать то, что хранится в базе в таблице user на втором сервере
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы