Kebergantungan tidak boleh diselesaikan (Laravel 8)
P粉729198207
P粉729198207 2023-12-13 10:13:44
0
1
424

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粉729198207
P粉729198207

membalas semua(1)
P粉458913655

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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!