Ax ios получить данные на основе токена, переданного из внешнего интерфейса - PullRequest
1 голос
/ 16 июня 2020

Ребята, вы можете мне помочь? Я пытался получить токен , который я поместил в качестве параметра из URL-адреса в Ax ios (Да, ID также включен в URL-адрес, НО это stati c для условия if else на бэкэнде). Я попытался обмануть методы запроса, но это не сработает, поскольку, если метод установлен как POST, он просто остается как POST. Он не будет ПОЛУЧАТЬ, УДАЛЯТЬ или ОБНОВЛЯТЬ что-либо еще. Пробовал file_get_contents, но поскольку это не POST, он не будет его читать. Также пробовал другие ответы из stackoverflow, но у них нет серверных частей.

индекс. js

findSub ({ commit }, payload) {
        return new Promise((resolve, reject) => {
          axios
            .get('http://localhost/MyComposer/?id=00', {
              params: {
                token: this.state.token
              }
            })
            .then(response => {
              resolve(response)
            })
            .catch(error => {
              reject(error)
            })
        })
      },

индекс. php

<?php
require 'Classes/Headers.php';
require 'vendor/autoload.php';

use Classes\SubjectClass;
use Classes\TestClass;
use Classes\AnswerClass;
use Classes\LoginClass;
use Classes\TeacherClass;
use Classes\AccountClass;

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $addsubject = new SubjectClass();
    $addsubject->addSubject();
    $addtest = new TestClass();
    $addtest->addTest();
    $submitTest = new AnswerClass();
    $submitTest->submitTest();
    $submitLoginData = new LoginClass();
    $submitLoginData->submitLoginData();
    $addTeacher = new TeacherClass();
    $addTeacher->addTeacher();
    $findSub = new TeacherClass();
    $findSub->findSub();
}

if ($_SERVER["REQUEST_METHOD"] == "GET") {
    $subOptions = new SubjectClass();
    $subOptions->getSubName();
    $testOptions = new TestClass();
    $testOptions->getTest();
    $accountOp = new AccountClass();
    $accountOp->getAccount();
}

SubjectClass. php

public function getSubName {
if ($_SERVER['QUERY_STRING'] === 'id=00') {
            $data = file_get_contents('php://input');
            $tokenId = json_decode($data);
            $token = $tokenId->{'token'};

            $db->where('AccessId', $access_id);
            $subId5 = $db->get('accounts');

            if ($subId5) {
                echo json_encode($subId5);
            }
        }
}

1 Ответ

0 голосов
/ 16 июня 2020

Из документации Ax ios ...

params - это параметры URL , которые будут отправлены с запросом

Ax ios может объединять любые параметры запроса в URL-адресе (ie ?id=00) с объектом params. С помощью кода на стороне клиента, который вы используете, это приведет к запросу GET на

http://localhost/MyComposer/?id=00&token=some-token-value

Независимо от типа запроса, PHP получает доступ к параметрам запроса через $_GET суперглобальный массив. Это означает, что пока вы используете

params: { token: someTokenValue }

для GET, POST, DELETE или любого другого метода запроса, PHP может получить доступ к токену через

$token = $_GET['token'] ?? null; // or whatever makes sense as a default

Небольшой совет для вашего JS кода ...

  1. Вы попали в слишком распространенный анти-шаблон явной конструкции обещания. Ax ios уже возвращает обещание, так что вы можете просто использовать его.
  2. Вы должны получить доступ к state из параметра context, переданного вашему действию, а не this.state
  3. Я бы не стал смешивать параметры запроса в URL и params. Последний намного проще и правильно кодирует значения
findSub: ({ state }) => axios.get('http://localhost/MyComposer/', {
  params: {
    id: '00',
    token: state.token
  }
})
...