所以,我第一次尝试设置php-di,但我在构建器方面遇到了一些问题。我不断收到错误消息:Uncaughtexception'DI\NotFoundException'withmessage'Noentryorclassfoundfor'IConnection''in/path/PHPDiContainer.php'我的容器设置哪里出错了?addDefinitions([IConnection::class=>DI\object(Connection::class)]);$container=$builder->build();$connection=$container->get('C
我正在尝试获取PHP-DI工作的基本示例,但我很容易被困在一个相当基本的示例中。我想我在这里遗漏了一些简单的东西,但没能把它挑出来。它无法识别LoggerInterface类型提示,但这是直接从示例中提取的,所以我不明白我做错了什么。当我从服务签名中删除LoggerInterface时,该示例工作正常。服务类:配置.php\DI\create(\test\ServiceLayer\TestService::class),Psr\Log\LoggerInterface::class=>DI\factory(function(){$logger=newLogger('mylog');ret
我正在使用JMSDI注入(inject)带有注解的服务:useJMS\DiExtraBundle\AnnotationasDI;/***@DI\Service("foo.bar.service")*/classmyClass{/***@DI\Inject("debug.stopwatch")*@var$stopWatch\Symfony\Component\Stopwatch\Stopwatch*/public$stopWatch;/***@DI\Inject("serializer")*@var$serializer\JMS\Serializer\Serializer*/public
如何从自定义类中获取服务定位器(或依赖对象)?我有:classCustomerHelperextendsPhalcon\Tag{}并且需要获取flash服务以在自定义函数中使用 最佳答案 您始终可以使用此静态方法获取任何类中的DI:$di=Phalcon\DI::getDefault();如果您正在扩展Phalcon\Tag,您还可以在静态上下文中使用$this->getDI()或self::getDI()。您可以在此处查看更多示例:http://docs.phalconphp.com/en/latest/reference/di.
让我们想象一下,我们正在开发处理数据库和session的极其简单的单例Auth类(我们不想要任何其他分解,如auth适配器等)。如何使DI从这个单例类中可用?当然,最好的方法是将DI实例传递给构造函数,但是如果我想从单例中获取它怎么办?我应该使用静态setter方法Auth::setDi($di)还是有更好的做法?或者我们应该避免单例,因为我们总是有DI存储?对不起我的英语,我希望我的问题很清楚。 最佳答案 您可以访问静态实例化的最新DI:http://docs.phalconphp.com/en/latest/reference/
我正在考虑重构用PHP构建的MVC应用程序中的一些代码,以利用依赖注入(inject)容器。我目前正在查看SymfonyDI组件,它看起来相当不错。我了解DI和DI容器的基础知识,但我是在整个应用程序中使用1个全局容器还是多个容器?例如,假设我有:“用户”类需要依赖项:“ActiveRecord”和“session”“SiteStatistics”类需要依赖项:“ActiveRecord”和“Sessions”是否应该将User和SiteStatistic对象放在不同的容器中?或者我应该有一个全局容器来包含我需要创建的所有内容吗?谢谢你:) 最佳答案
PHP-DI允许一些方法定义注入(inject),包括工厂和对象:http://php-di.org/doc/php-definitions.html.工厂:TestClass::class=>function(){returnnewTestClass('param');}TestClass实例是延迟创建的,仅在需要时才创建。对象:TestClass::class=>DI\object()->constructor('param')如果使用Objects,实例是否也是延迟创建的?如果是,工厂和对象有什么区别? 最佳答案 这里是PHP
我在一个新项目中使用phalcon,但我意识到phpStorm不理解我自己的注入(inject)器,例如:/***Registeringthehelpercomponent*/$di->set('helper',function(){$helper=new\Frontend\Helpers\Common();return$helper;});从我的Controller我可以做到这一点:$this->helper->getHelp();它工作正常,但IDE不会自动完成我的代码。我当然可以这样做:/**@var\Frontend\Helpers\Common$helper*/$helper
我在使用ContainerBuilder配置容器时设置了依赖项和定义,然后编译它以获得实际的Container,但是每当我尝试注入(inject)依赖项时,它们总是倾向于被忽略。我是否错过了injectOn()方法的概念,或者我在这里做错了什么($this->translator仍未分配)?我已经尝试了不同的方法,既实例化类并将对象添加到ContainerBuilder并将其作为\DI\object()定义传递,两者都使用同样的结果。translator=$translator;}publicfunctiontest(){var_dump($this->translator);}}cl
据我所知,有效模式是:一个实例化所需服务(FooService)的FooControllerFactory带有构造函数__construct(FooService$fooService)的FooControllerController获取一些基础数据并从服务中得到结果服务包含所有必需的业务逻辑这是一项基础服务。最终,这项服务将需要其他服务来进行各种事件。例如CacheService、SomeOtherDataService。Thequestionis,whatisavalid/appropriatepatternforincluding/injectingthoseotherinter