0

Executed:

composer require uploadcare/uploadcare-php

I can find the library in vendor/uploadcare.

Then added to config/app.php:

'providers' => [
     App\Providers\UploadcareServiceProvider::class,
]

and

'aliases' => Facade::defaultAliases()->merge([
    'Uploadcare' => App\Facades\Uploadcare::class,
])->toArray(),

Then in App/Facades folder, created this file:

<?php 

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class Uploadcare extends Facade {

    protected static function getFacadeAccessor(){
        return 'uploadcare';
    }
}

This file is successfully referenced in config/app.php according to Visual Studio code.

Then in App/Providers I created UploadcareServiceProvider.php file:

<?php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Uploadcare\UploadcareConfiguration;
use Uploadcare\Interfaces\ConfigurationInterface;

class UploadcareServiceProvider extends ServiceProvider
{
    public function boot()
    {            
        $this->mergeConfigFrom(__DIR__.'/../../config/uploadcare.php', 'uploadcare');
    }
      
    public function register()
    {
        $this->app->bind(ConfigurationInterface::class, function ($app) {
            return new UploadcareConfiguration();
        });

        $this->app->bind(Uploadcare\Api::class, function ($app) {
            $config = $app->make(ConfigurationInterface::class);
            return new Uploadcare\Api($config);
        });
    }
}

This file is successfully referenced in config/app.php according to Visual Studio code, it loads config/uploadcare.php which I have with the following (I redacted my public and private key):

<?php

return [
    'public_key' => env('my-public-key'),
    'private_key' => env('my-private-key'),
];

Then I created a controller to see whether I can successfully load a list of files form Uploadcare:

<?php

namespace App\Http\Controllers;

use Uploadcare\Api;
use App\Facades\Uploadcare;
use App\Uploadcare\UploadcareConfiguration;
use Uploadcare\Interfaces\ConfigurationInterface;


class UploadcareController extends Controller
{
    public function index()
    {
        $api = Uploadcare::Api(config('uploadcare.public_key'), config('uploadcare.public_secret'));
        $files = $api->files()->all();
        return $files;
    }
}

I call the controller using this route:

Route::get('/uploadcare', [UploadcareController::class, 'index']);

When visiting example.com/uploadcare I get the following error:

Target class [uploadcare] does not exist.

When I change the code in the controller to the following, I get the same error:

$files = Uploadcare::File()->getFileList();

When I hover Uploadcare in Visual Studio it successfully references the Facade.

bart
  • 14,958
  • 21
  • 75
  • 105
  • 1
    In the SDK docs, there's an example of initializing a Laravel container https://github.com/uploadcare/uploadcare-php-example#laravel-container-example. Have you tried it? – Alex Chernenko Dec 07 '22 at 10:12

0 Answers0