php: // вводим потерянные данные при изменении URL, чтобы не включать index.php - PullRequest
0 голосов
/ 13 сентября 2018

Итак, я создаю пользовательскую конечную точку API, в которую мне нужно отправлять данные из Laravel. Мне понадобится куча URL-адресов, и я хотел сделать это как можно более чистым, но при этом все еще делать это с нуля без фреймворка.

Я пытался создать следующую конечную точку

/ API / категории / создать /

Теперь я могу опубликовать с помощью Guzzle в /api/categories/create/index.php и получить содержимое с помощью file_get_contents('php://input') просто отлично. И я знаю, что когда я удаляю index.php, он все еще отправляется в нужное место, потому что я могу отправить ответ «Hello» в качестве ответа и получаю его ».

В некоторой степени озадачен тем, почему file_get_contents('php://input') может получить данные, которые я отправляю, но только когда я явно указываю index.php в конце URL.

Вот мой запрос, хотя я не думаю, что ошибка исходит от этого ...

$client = new Client([
    'base_uri' => 'http://example.test/'
]);

$course = [
    'title'       => $request->title,
    'description' => $request->description,
    'site'        => $request->site
];

$response = $client->post('api/categories/create', [
    'json' => ['course' => $course]
]);

Есть идеи?

1 Ответ

0 голосов
/ 13 сентября 2018

вам нужно добавить файл .htaccess, который определяет index.php как одну точку доступа.

шаблон перезаписи должен быть (похож на) controller/method/id, например:

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    # remove trailing slash
    RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/(.*)/(\d+)$ /index.php?controller=$1&method=$2&id=$3 [L,NC,QSA]

</IfModule>

, за которым следуют другие шаблоны, которые переписываются без id, а также без method (по умолчанию для индекса).

api/categories/create потребует аналогичного шаблона ~ ^(.*)/(.*)/(.*)$ /index.php?controller=$1&subject=$2&method=$3 [L,NC,QSA]. Можно также определить возможные значения с помощью логического OR подобно ^(.*)/(.*)/(create|read|update|destroy)(/|)$.

...