cari

Rumah  >  Soal Jawab  >  teks badan

Kebergantungan tidak boleh diselesaikan (Laravel 8)

Menggunakan pakej "jasny/sso", saya mendapat ralat berikut:

IlluminateContractsContainerBindingResolutionException
Unresolvable dependency resolving [Parameter #0 [ <required> callable $getBrokerInfo ]] in class JasnySSOServerServer

JasnySSOServerServer.php Dalaman:

/**
 * Class constructor.
 *
 * @phpstan-param callable(string):?array{secret:string,domains:string[]} $getBrokerInfo
 * @phpstan-param CacheInterface                                          $cache
 */
public function __construct(callable $getBrokerInfo, CacheInterface $cache)
{
    $this->getBrokerInfo = Closure::fromCallable($getBrokerInfo);
    $this->cache = $cache;

    $this->logger = new NullLogger();
    $this->session = new GlobalSession();
}

Saya juga mencuba:

php artisan route:clear
composer dump-autoload    
php artisan optimize:clear

Bolehkah sesiapa menunjukkan masalah di sini?

P粉729198207P粉729198207346 hari yang lalu445

membalas semua(1)saya akan balas

  • P粉458913655

    P粉4589136552023-12-14 00:13:30

    Memandangkan jasny/sso bukan pakej Laravel, ia tidak sepatutnya didaftarkan dengan bekas tanpa set arahan khusus tentang cara untuk membuat instantiat berdasarkan pembinanya.

    Tambah kod berikut dalam kaedah AppServiceProviderregister():

    $this->app->bind(\Jasny\SSO\Server\Server::class, function($app) {
       $myCallable = function() {
           // do what you gotta do..
       };
    
       return new \Jasny\SSO\Server\Server($myCallable, $app->make(CacheInterface::class));
    });
    

    Dari situ anda boleh melakukan perkara berikut dari mana-mana sahaja dalam apl:

    /** @var \Jasny\SSO\Server\Server $jasnyServer **/
    $jasnyServer = app()->make(\Jasny\SSO\Server\Server::class);
    $jasnyServer->changeTheWorld(true);
    

    Ia secara automatik akan mengisi pembina dengan boleh panggil dan CacheInterface yang kami sediakan dalam pengikatan (anda juga boleh menggunakan $app->singleton() dan bukannya pengikatan jika anda hanya memerlukan satu contoh kelas ini yang wujud sepanjang pelaksanaan skrip).


    Biasanya apa-apa sahaja yang anda daftarkan ke dalam bekas akan dipengaruhi oleh suntikan kebergantungan Laravel, jadi anda tidak boleh menggunakan jenis yang tidak diketahui dalam pembina kerana Laravel tidak mempunyai cara untuk mengetahui apa itu callable, dan ralat ini akan dijana apabila itu berlaku .

    Biasanya, jika anda boleh mengawal ini, anda boleh mengalih keluar fungsi boleh panggil daripada pembina dan menggunakan penetap pada kelas.

    private $callableFunc = null;
    
    public function setCallable(callable $func) : void
    {
        $this->callableFunc = $func;
    }
    

    balas
    0
  • Batalbalas