kreait / laravel-firebase

A Laravel package for the Firebase PHP Admin SDK
https://github.com/kreait/firebase-php
MIT License
988 stars 162 forks source link

Call to undefined method Google\Cloud\Firestore\DocumentSnapshot::delete() #189

Closed SRLQNL closed 11 months ago

SRLQNL commented 11 months ago

Describe the bug

Call to undefined method Google\Cloud\Firestore\DocumentSnapshot::delete()

Installed packages

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "php": "^8.0.2",
        "google/cloud-firestore": "^1.34",
        "google/cloud-storage": "^1.31",
        "guzzlehttp/guzzle": "^7.2",
        "kreait/laravel-firebase": "5.2.0",
        "laravel/framework": "^9.19",
        "laravel/sanctum": "^3.0",
        "laravel/tinker": "^2.7"
    },
    "require-dev": {
        "fakerphp/faker": "^1.9.1",
        "laravel/pint": "^1.0",
        "laravel/sail": "^1.0.1",
        "mockery/mockery": "^1.4.4",
        "nunomaduro/collision": "^6.1",
        "phpunit/phpunit": "^9.5.10",
        "spatie/laravel-ignition": "^1.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-update-cmd": [
            "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true,
        "allow-plugins": {
            "pestphp/pest-plugin": true
        }
    },
    "minimum-stability": "stable",
    "prefer-stable": true
}

PHP version and extensions

php 8.1

Steps to reproduce the issue.

-

Error message/Stack trace

Call to undefined method Google\Cloud\Firestore\DocumentSnapshot::delete()

Additional information

`<?php

namespace App\Http\Controllers;

use Kreait\Firebase\Exception\Auth\FailedToVerifyToken; use Kreait\Firebase\Contract\Storage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Session; use Kreait\Firebase\Factory; use Kreait\Firebase\Auth; use Firebase\Auth\Token\Exception\InvalidToken; use Kreait\Firebase\Exception\Auth\RevokedIdToken; use Google\Cloud\Firestore\FirestoreClient; use Kreait\Firebase\Auth\CreateSessionCookie\FailedToCreateSessionCookie; use Kreait\Laravel\Firebase\Facades\Firebase;

class RegistController extends Controller { public function submit(Request $request){ $auth = app('firebase.auth');
$userProperties = [ 'email' => $request->email, 'password' => $request->password, ];

    $createdUser = $auth->createUser($userProperties);
    $database = app('firebase.firestore')->database()->collection('Users')->document($createdUser->uid);

    $image = $request->file('image');
    $firebase_path = 'Profile_Images/';
    $localfolder = public_path('firebase-temp-uploads').'/';
    $name = $createdUser->uid;
    $extension = $image->getClientOriginalExtension();
    $file = $name;
    $image->move($localfolder,$file);
    $uploadedfile = fopen($localfolder.$file,'r');
    $object = app('firebase.storage')->getBucket()->upload($uploadedfile,['name'=>$firebase_path.$file]);
    $expiresAt = new \DateTime('36500 days');
    $imageReference = app('firebase.storage')->getBucket()->object("Profile_Images/".$file);
    $image = $imageReference->signedUrl($expiresAt);
    $database->set([
        'userBio' => $request->message,
        'userBioLink' => $request->number,
        'userEmail' => $request->email,
        'userProfileURL' => $image,
        'userUID' => $createdUser->uid,
        'username' => $request->name,

    ]);
    return redirect()->route('auth');
}

public function delete(Request $request){
    $all_posts = app('firebase.firestore')->database()->collection('Posts');
    $query = $all_posts->where('userUID', '=', \Session::get('uid'));
    $my_posts = $query->documents();
    foreach($my_posts as $post){
        $post->delete();
    }
    app('firebase.auth')->deleteUser(Session::get('uid')); 
    app('firebase.firestore')->database()->collection('Users')->document(Session::get('uid'))->delete(); 
    Session::forget('uid');
    return redirect()->route('home');
}

public function auth(Request $request){
    $auth = app('firebase.auth');
    $email = $request->input('email'); 
    $pass = $request->input('password');
    $signInResult = $auth->signInWithEmailAndPassword($email, $pass);
    try {
        $signInResult = $auth->signInWithEmailAndPassword($email, $pass);
        Session::put('uid', $signInResult->firebaseUserId());
        Session::save();
        return redirect()->route('profile');
    } catch (\Throwable $e) {
        switch ($e->getMessage()) {
            case 'INVALID_PASSWORD':
                echo "Неверный пароль";
                break;
            case 'EMAIL_NOT_FOUND':
                echo "Почта не найдена";
                break;
            default:
                dd($e->getMessage());
                break;
        }
    }

}

}`

jeromegamez commented 11 months ago

As the error already tells, the method is undefined, as can be confirmed at https://github.com/googleapis/google-cloud-php-firestore/blob/main/src/DocumentSnapshot.php

The Firestore library is not part of the SDK, it only provides a bridge, as you can read up at https://firebase-php.readthedocs.io/en/stable/cloud-firestore.html

There, you can also find links to documentation by Google.

I web-searched for you: https://github.com/GoogleCloudPlatform/php-docs-samples/blob/main/firestore/src/data_delete_doc.php and https://cloud.google.com/firestore/docs/manage-data/delete-data#php