2014-02-18 4 views
1

У меня проблемы с моим веб-сервисом, который я создал в php с помощью Laravel Framework.Laravel PHP - отправить объект JSON с помощью метода GET

У меня есть следующий URL для вызова:

http://localhost:100/cust/server.php/InitialSync/{"IdCard": "lxpIu1bD4UX4W2h5EM+i6VEQUZk+i\/SJF1DU6179HBejWkOBENSflnTSN\/8N14OGTqh6fH\/6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q=="} 

Итак, вы видите, что я отправить объект JSON с зашифрованной IDcard на сервер. Мой маршрут выглядит так:

Route::get('InitialSync/{idCard}, '[email protected]'}; 

Так Проблема заключается в том, что эта работа won't. Я думаю, что проблемы - это/в JsonObject.

Кто-нибудь из вас знает, как я могу решить эту проблему.

Результат от Laravel является:

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException 

Я думаю, что он пытается найти маршрут из Но потому в/в объекте Json я получаю эту ошибку.

+0

Возможный дубликат [Нужно разрешить кодированные косые черты на Apache] (http: // stackoverflow.com/questions/4390436/need-to-allow-encoded-slashes-on-apache) –

+0

Какая ошибка возвращается? Ваш URL-адрес странный. Почему вы используете порт 100? Что такое путаница? Что такое ** server.php ** файл? – carousel

+0

Итак, вы думаете, что это проблема с apache? – Alex

ответ

3

К сожалению Laravel не может undestand вашего браузера будет иметь проблемы обработать JSON, передаваемые через GET, даже если вы кодировать и stringify его с помощью Javascript:

encodeURIComponent(
    JSON.stringify(
    {"IdCard": "lxpIu1bD4UX4W2h5EM+i6VEQUZk+i\/SJF1DU6179HBejWkOBENSflnTSN\/8N14OGTqh6fH\/6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q=="} 
) 
) 

Wich формирует эту строку:

"%7B%22IdCard%22%3A%22lxpIu1bD4UX4W2h5EM%2Bi6VEQUZk%2Bi%2FSJF1DU6179HBejWkOBENSflnTSN%2F8N14OGTqh6fH%2F6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q%3D%3D%22%7D" 

У Laravel все еще есть вопросы, чтобы распознать маршрут в этом URL-адресе. Это не сработает.

Источником проблемы являются экранированные символы \/, присутствующие в строке. Так у вас есть несколько вариантов:

1) отправить его с помощью POST

2) Base64 кодируют IDcard и декодирование обратно в Laravel.

3) Замените эти символы чем-то другим и верните его в Laravel.

4) Заполните ошибку в репозитории Gatarub Laravel и дождитесь их исправления.

+0

ОК, я попробовал ваше решение сейчас, и у меня такая же проблема, я получаю ошибку 404. Моя проблема в том, что я отправляю зашифрованную строку (AES), и мой маршрут Laravel должен принять это. – Alex

+0

Мое решение? Я не дал решения, я дал вам 3 варианта, и ни одно из них не является решением. После кода, который я показал, я сказал, что «Laravel по-прежнему будет иметь значение для распознавания маршрута в этом URL-адресе», а это означает, что даже это не заставит его работать. –

+0

okay ... так что это означает, что у меня нет изменений для обработки этого запроса Get Request. Таким образом, единственным решением является создание Post, а не Get. ты согласен с этим? – Alex

0

Вы могли бы сделать что-то вроде этого:

1) на маршрутизаторе:

Route::get('/readjson/{json}', '[email protected]'); 

2) на контроллере:

class MyController extends BaseController { 

    public function readJson() { 
     dd(request()->segments()); 
    } 
} 

Это должно напечатать все сегменты запрашиваемое URI, включая параметр, отправленный как строка JSON

3) Затем просто замените сегменты() на сегмент (n), чтобы получить точный. В этом случае должно быть число 2 или 3, если вы используете маршруты api (маршруты/api.php). Оттуда вы можете использовать json_decode или что-нибудь еще для декодирования строки JSON.

Смежные вопросы