Curl 如何在通过RESTAPI向Firebase添加对象时设置我们自己的密钥

Curl 如何在通过RESTAPI向Firebase添加对象时设置我们自己的密钥,curl,firebase,firebase-realtime-database,Curl,Firebase,Firebase Realtime Database,我使用以下方法将对象添加到Firebase数据库 $url = "https://myfb.firebaseio.com/api/types/ty/packs.json"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT

我使用以下方法将对象添加到Firebase数据库

$url = "https://myfb.firebaseio.com/api/types/ty/packs.json";
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);                               
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $userData);
 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
        $jsonResponse = curl_exec($ch);
        if(curl_errno($ch))
        {
            echo 'Curl error: ' . curl_error($ch);
        }
 curl_close($ch);
$userData
将保存在数据库中唯一生成的节点下,如下所示


我想为该节点提供自定义密钥。我是怎么做到的

将url更改为所需的Id:

$url = "https://myfb.firebaseio.com/api/types/ty/packs/MY_CUSTOM_ID.json";

请参见Franke van Puffelen的类似回答:

如果您使用Firebase REST API在Firebase中插入数据时使用的是自定义Id,而没有任何子(自动生成)Id,请使用“Put”而不是“Post”。

Firebase文档告诉我们,“如果使用REST API,某些方法将被覆盖。”所以您必须使用头X-HTTP-Method-Override:PUT或addcustommethodforPHPCURL

比如,

function saveObject(){
    $KEY ='YOUR_FIREBASE_SERVER_KEY';
    $headers = array('Content-Type:application/json', 'Authorization:key='.$KEY);

    //$object = new StdClass();
    //$object->key = "value";

    // or array....

    $object = array('key' => 'value');

    $data = json_encode($object);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://YOURFIREBASEURL/YOUR_ROOT.json");
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // <--- This line important
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);    // <--- This line to
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $response = curl_exec($ch);

    if(curl_errno($ch)){
        return false;
    }

    curl_close($ch);

    return $response;
}
函数saveObject(){
$KEY='YOUR_FIREBASE_SERVER_KEY';
$headers=array('Content-Type:application/json','Authorization:key='。$key);
//$object=新StdClass();
//$object->key=“value”;
//或数组。。。。
$object=array('key'=>value');
$data=json_encode($object);
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,”https://YOURFIREBASEURL/YOUR_ROOT.json");

curl_setopt($ch,CURLOPT_CUSTOMREQUEST,“PUT”);//但是在我的自定义ID中有另一个唯一生成的节点。我们不能阻止它吗?我需要将我的数据保存在自定义ID中。而不是我的自定义ID->唯一生成->我的数据。我不是你的用户,你的用户数据是什么样子的。文档解释了怎么做。你找到解决方案了吗?我遇到了同样的问题。你呢找到上述问题的解决方案吗?因为我也被困在这里。@ChandraShekharKaushik是的。创建嵌套JSON,包括自定义的唯一键作为键。