Size: a a a

2020 December 13

P

PSYTRGLES in Laravel Pro
dump-autoload (альяс)
источник

V

Vladyslav in Laravel Pro
GODU
PHP Fatal error:  Uncaught Illuminate\Contracts\Container\BindingResolutionException: Target [Contracts\ServiceInterface] is not instantiable while building [App\ServiceFactory]. in /var/www/html/container/vendor/illuminate/container/Container.php:1038
Stack trace:
#0 /var/www/html/container/vendor/illuminate/container/Container.php(839): Illuminate\Container\Container->notInstantiable()
#1 /var/www/html/container/vendor/illuminate/container/Container.php(712): Illuminate\Container\Container->build()
#2 /var/www/html/container/vendor/illuminate/container/Container.php(651): Illuminate\Container\Container->resolve()
#3 /var/www/html/container/vendor/illuminate/container/Container.php(980): Illuminate\Container\Container->make()
#4 /var/www/html/container/vendor/illuminate/container/Container.php(900): Illuminate\Container\Container->resolveClass()
#5 /var/www/html/container/vendor/illuminate/container/Container.php(861): Illuminate\Container\Container->resolveDependencies()
#6 /var/www/html/container/vendor/illuminate/container in /var/www/html/container/vendor/illuminate/container/Container.php on line 1038

Fatal error: Uncaught Illuminate\Contracts\Container\BindingResolutionException: Target [Contracts\ServiceInterface] is not instantiable while building [App\ServiceFactory]. in /var/www/html/container/vendor/illuminate/container/Container.php on line 1038

Illuminate\Contracts\Container\BindingResolutionException: Target [Contracts\ServiceInterface] is not instantiable while building [App\ServiceFactory]. in /var/www/html/container/vendor/illuminate/container/Container.php on line 1038
Теперь новые ошибки))
Target [Contracts\ServiceInterface] is not instantiable while building [App\ServiceFactory]
источник

V

Vladyslav in Laravel Pro
у тебя есть реализация Contracts\ServiceInterface ?
источник

G

GODU in Laravel Pro
PSYTRGLES
dump-autoload (альяс)
а что их не нужно вписывать в справочник?!)) удобно же
источник

G

GODU in Laravel Pro
Vladyslav
у тебя есть реализация Contracts\ServiceInterface ?
<?php

declare(strict_types = 1);

namespace App;

use Contracts\ServiceInterface;

class Service implements ServiceInterface
{
   protected $configName;

   public function __construct($configName)
   {
       $this->configName = $configName;
   }

   public function get(): string
   {
       return "{$this->configName}:" . __CLASS__;
   }
}
источник

V

Vladyslav in Laravel Pro
GODU
$container->bind(ServiceFactoryInterface::class, ServiceFactory::class);
$service = $container->make(ServiceFactoryInterface::class, ['configName' => 'test']);
вот так забиндил
я тут вижу реализацию только
ServiceFactoryInterface где в конструкт ServiceFactory ты передаешь инстанс ServiceInterface который не реализован ?
источник

V

Vladyslav in Laravel Pro
верней бинд
источник

V

Vladyslav in Laravel Pro
*
источник

G

GODU in Laravel Pro
Vladyslav
я тут вижу реализацию только
ServiceFactoryInterface где в конструкт ServiceFactory ты передаешь инстанс ServiceInterface который не реализован ?
Ты хочешь сказать что я не связал ServiceInterface с реализацией?, тогда по логике я должен сделать Factory singleton, а Service bind
источник

V

Vladyslav in Laravel Pro
GODU
Ты хочешь сказать что я не связал ServiceInterface с реализацией?, тогда по логике я должен сделать Factory singleton, а Service bind
а откуда тогда оно поймет что в конструкте надо вытащить из ServiceInterface ?
источник

AR

Ali Rymkhanov in Laravel Pro
для красной строки что вы пишете??)))
источник

G

GODU in Laravel Pro
Vladyslav
а откуда тогда оно поймет что в конструкте надо вытащить из ServiceInterface ?
Согласен, я контейнер отдельно юзаю, тестирую возможности
источник

G

GODU in Laravel Pro
Vladyslav
а откуда тогда оно поймет что в конструкте надо вытащить из ServiceInterface ?
Мне кажется я разобрался, позвольте сделать рефлексию:
1. При условии что у меня в службах есть доп параметры, мне нужно указать конкретную реализацию
$container->bind(ServiceInterface::class,  function($app) {
   return $app->make(Service::class, ['configName' => 'sd']);
});

Верно ли утверждение? Или можно это как-то по-другому упоковывать?
источник

V

Vladyslav in Laravel Pro
GODU
Мне кажется я разобрался, позвольте сделать рефлексию:
1. При условии что у меня в службах есть доп параметры, мне нужно указать конкретную реализацию
$container->bind(ServiceInterface::class,  function($app) {
   return $app->make(Service::class, ['configName' => 'sd']);
});

Верно ли утверждение? Или можно это как-то по-другому упоковывать?
🤔
источник

G

GODU in Laravel Pro
Допустим сократить запись
$container->bind(ServiceInterface::class, Service::class);

а пото где-то вызвать
$container->make(ServiceInterface::class, ['cofigName' => 'test']);

Но так вылетает ошибка не указан типо парамерт
источник

R

Rabadan in Laravel Pro
Боже, публикуейте исходники в pastebin , уважайте чужое время
источник

G

GODU in Laravel Pro
GODU
Мне кажется я разобрался, позвольте сделать рефлексию:
1. При условии что у меня в службах есть доп параметры, мне нужно указать конкретную реализацию
$container->bind(ServiceInterface::class,  function($app) {
   return $app->make(Service::class, ['configName' => 'sd']);
});

Верно ли утверждение? Или можно это как-то по-другому упоковывать?
Тут вопрос встал, потому что параметры не хочется пробрасывать в колбэк, надо чтобы при вызове маке() в любой части программы можно было динамически конфигурировать службу
источник

🎃

🎃 Даниил ◠‿◠✿... in Laravel Pro
GODU
Тут вопрос встал, потому что параметры не хочется пробрасывать в колбэк, надо чтобы при вызове маке() в любой части программы можно было динамически конфигурировать службу
динамические параметры?
источник

G

GODU in Laravel Pro
🎃 Даниил ◠‿◠✿
динамические параметры?
Угу, но вот ситуация чтобы забиндить службы и фабрику служб нужно в провайдере регистрировать, а потом ты ее можешь вызвать в любой части программы, значит должна быть make(интерфейс службы, конфиг)
источник

🎃

🎃 Даниил ◠‿◠✿... in Laravel Pro
GODU
Угу, но вот ситуация чтобы забиндить службы и фабрику служб нужно в провайдере регистрировать, а потом ты ее можешь вызвать в любой части программы, значит должна быть make(интерфейс службы, конфиг)
делай через каллбек
https://laravel.com/docs/8.x/container#simple-bindings
источник