您能给我一个提示吗?为什么PHP-DI与Zend Framework 2的集成不适合我(使用Apache/2.4.9(Win64)PHP/5.5.12和Apache/2.2.22(Win32)PHP/5.3.13复制)。
创作者json:
{
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.3.5",
"mnapoli/php-di": "4.4.6",
"mnapoli/php-di-zf2": "0.3.0",
...
},
...
配置\应用程序。配置。php:
<?php
return array(
'modules' => array(
'Morpho',
'DI\ZendFramework2',
),
'module_listener_options' => array(
'module_paths' => array(
'./module',
'./vendor',
),
),
);
?>
模块/Morpho/config。单元配置。php:
<?php
return array(
'service_manager' => array(
'factories' => array(
'DI\Container' => function() {
$builder = new DI\ContainerBuilder();
$builder->addDefinitionsFromFile("config/di.yml");
return $builder->build();
},
),
),
'router' => array(
...
),
'controllers' => array(
...
),
'view_manager' => array(
...
),
);
config/di。yml:
Morpho\Service\PartOfSpeechService:
class: Morpho\Service\PhpMorphyPartOfSpeechService
模块/Morpho/src/Morpho/Controller/PartOfSpeechController:
class PartOfSpeechController extends AbstractRestfulController {
...
/**
* @Inject
* @var PartOfSpeechService
*/
public $partOfSpeechService;
public function processPostData(Request $request) {
$partsOfSpeech = $this->partOfSpeechService->getPartsOfSpeech("test", "en_EN");
return new JsonModel($partsOfSpeech);
}
}
每次在apache下运行此代码时,我得到:
PHP Fatal error: Uncaught exception 'Zend\ModuleManager\Exception\RuntimeException'
with message 'Module (DI\ZendFramework2) could not be initialized.' in \vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php:195
Stack trace:
0 \vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php(169): Zend\ModuleManager\ModuleManager->loadModuleByName(Object(Zend\ModuleManager\ModuleEvent))
1 \vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php(96): Zend\ModuleManager\ModuleManager->loadModule('DI\ZendFramewor...')
2 [internal function]: Zend\ModuleManager\ModuleManager->onLoadModules(Object(Zend\ModuleManager\ModuleEvent))
3 \vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468):
call_user_func(Array, Object(Zend\ModuleManager\ModuleEvent))
4 \vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(207): Zend\EventM in \vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php on line 195
如果您有任何想法,我们将不胜感激。
我遵循了Purple Hexagon的建议,下面是一个使用Service Manager的工作实现:
模块/Morpho/配置:
...
'service_manager' => array(
'services' => array(
"PartOfSpeechService" => new Morpho\Service\PhpMorphyPartOfSpeechService(),
),
),
...
模块/Morpho/src/Morpho/控制器/partOfSpeechController.php:
class PartOfSpeechController extends AbstractRestfulController {
...
public function processPostData(Request $request) {
$serviceManager = $this->getServiceLocator();
$partsOfSpeech = $serviceManager->get("PartOfSpeechService")->getPartsOfSpeech($request->getPost("phrase"),
$request->getPost("language"));
return new JsonModel($partsOfSpeech);
}
}
为什么我不喜欢这个:
我认为PHP-DI更接近JavaSpring使用的bean注入模型(我认为这很好)。不幸的是,它仍然不适合我。最后,从容器中获取对象的方法也在PHP-DI中工作。
对于服务:
工厂配置:
'factories' => array(
'MyService' => 'Application\Factory\MyService',
),
工厂等级:
class MyService implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceManager)
{
$purifier = new MyService($serviceManager->get('MyAwesomeDependency'));
return $purifier;
}
}
对于控制器:
控制器工厂。php:
class PartOfSpeechControllerFactory
{
public function __invoke($serviceLocator)
{
// Service locator here is the ControllerManager so get ServiceManager
$serviceManager = $serviceLocator->getServiceLocator();
$controller = new PartOfSpeechController($serviceManager->get('PartOfSpeechService'));
return $controller;
}
}
类partOfSpeechController.php
class PartOfSpeechController extends AbstractRestfulController {
protected $partOfSpeechService;
public function __construct(PartOfSpeechService $partOfSpeechService)
{
$this->partOfSpeechService = $partOfSpeechService;
}
public function processPostData(Request $request) {
$var = $this->partOfSpeechService->serviceMethod();
}
}
控制器的配置:
'factories' => array(
'Application\Controller\PartOfSpeechController' => 'Application\Factory\PartOfSpeechControllerFactory'
),
它不起作用,因为您使用的是旧的YAML语法,而是PHP-DI v4。0语法现在是PHP。
请参阅文档了解语法:http://php-di.org/doc/definition.html
我在php中使用firebase作为后端,但当我调用“ServiceAccount”的“fromJsonFile”方法时,我得到以下错误: 致命错误:未捕获错误:调用私有方法Kreait\Firebase\Service帐户::fromJsonFile()从上下文"在C:\xampp\htdocs\wordpress\wp-Content\plugins\firebase-connection.p
我用javafx和hibernate构建了一个完整的应用程序,我的问题是事务的管理,我通过使用spring框架找到了解决方案我在google中搜索了一种集成javafx和spring的方法我找到了一种困难的方法有一种简单的方法吗?
null IntelliJ查找JavaFX包的源代码。我可以研究JavaFX代码。但是为什么不能编译和运行呢?
我试图将AWS API网关与AWS lambda函数集成。集成工作完美无缺,直到我在集成请求中使用“Lambda代理集成”。 当我在集成请求中选中“使用Lambda代理集成”时,我开始得到: “由于配置错误,执行失败:Lambda代理响应格式错误” 我在谷歌上搜索了一下,意识到我需要以某种格式返回响应: 然而,尽管如此,我仍然看到同样的错误。我做错了什么? 这就是我的Lambda函数的样子: 当我
问题内容: spring有两种两种类型的DI:设定器DI和结构DI。 基于构造函数的DI固定需要注入依赖项的顺序。基于Setter的DI不提供此功能。 基于Setter的DI帮助我们仅在需要时才注入依赖,而不是在构造时要求依赖。 我看不到任何其他显着差异,因为两种类型的Spring DI提供相同的功能-设置程序和构造函数DI在代码启动时都会注入依赖项。诚然,构造函数DI将通过构造函数完成此操作,而
KOtlin DEpendency INjection Kodein-DI is a very simple and yet very useful dependency retrieval container. it is very easy to use and configure. Kodein-DI works: On the JVM. On Android. On Javascript