因此,我正在构建一个自定义API端点,我需要将该端点从Laravel发送数据。我将需要大量的URL,并希望做到这一点尽可能干净,同时仍然必须从头开始而没有框架。
我正在尝试创建以下端点
/ api / categories / create /
现在,我可以将Guzzle发布到/api/categories/create/index.php并使用file_get_contents('php://input')
获取内容了。而且我知道,当我删除index.php时,它仍会发布到正确的位置,因为我可以将“ Hello”发送回去,并且确实收到了它。
有点困惑,为什么file_get_contents('php://input')
可以获取我正在发送的数据,但是只有当我在URL末尾显式指定index.php时。
这是我的要求,尽管我认为错误不是来自此...
$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]
]);
有什么想法吗?
答案 0 :(得分:1)
您需要添加一个.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)(/|)$
定义可能的值。