어떤 이유로 든 내 'service_manager'
구성이 제대로 읽히지 않았다고 생각합니다. 이것은 거의 새로운 스켈레톤 체크 아웃입니다. 어쩌면 하루 일할 수도 있습니다.고객 서비스 및 서비스 팩토리가 ZF3에 등록되지 않았습니다.
나는 최근에 다른 것을 한 번 비교해 보았습니다. 나는 내가 어디로 잘못 갔는지 알 수 없다. 나는 그래서 서비스가 등록되지 않을 것을 확신 부족, 바보, 리터럴 문자열에 \Application\Service\UserService::class
변경 시도 Unable to resolve service "Application\Service\UserService" to a factory; are you certain you provided it during configuration?
: 익명 함수에서
은 Controller\DbBuilderController::class => function(ContainerInterface $container, $requestedName) {
에 의해 오류가 발생 $userService = $container->get(\Application\Service\UserService::class);
라인을 지적했다.
왜 이런 일이 일어날 지 모르겠습니다. 어떤 사람?
<?php
namespace Application;
use Zend\Mvc\Application;
use Zend\Mvc\Controller\LazyControllerAbstractFactory;
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;
use Zend\ServiceManager\Factory\InvokableFactory;
use Interop\Container\ContainerInterface;
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
return [
'service_manager' => [
'factories' => [
\Application\Service\UserService::class => \Application\Service\Factory\UserServiceFactory::class
],
],
'doctrine' => [
'driver' => [
__NAMESPACE__ . '_driver' => [
'class' => AnnotationDriver::class,
'cache' => 'array',
'paths' => [__DIR__ . '/../src/Entity']
],
'orm_default' => [
'drivers' => [
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
]
]
]
],
'router' => [
'routes' => [
'home' => [
'type' => Literal::class,
'options' => [
'route' => '/',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
],
],
'createUser' => [
'type' => Segment::class,
'options' => [
'route' => '/createuser/:username/:password',
'defaults' => [
'controller' => Controller\DbBuilderController::class,
'action' => 'createUser',
'username' => '',
'password' => ''
],
],
],
'importTrades' => [
'type' => Literal::class,
'options' => [
'route' => '/importTrades',
'defaults' => [
'controller' => Controller\DbBuilderController::class,
'action' => 'importTrades',
],
],
],
'createExchanges' => [
'type' => Literal::class,
'options' => [
'route' => '/createExchanges',
'defaults' => [
'controller' => Controller\DbBuilderController::class,
'action' => 'createExchanges',
],
],
],
],
],
'controllers' => [
'factories' => [
Controller\IndexController::class => InvokableFactory::class,
Controller\DbBuilderController::class => function(ContainerInterface $container, $requestedName) {
$entityManager = $container->get('doctrine.entitymanager.orm_default');
$userService = $container->get(\Application\Service\UserService::class);
return new Controller\DbBuilderController($entityManager, $userService);
},
],
],
'view_manager' => [
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => [
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
],
'template_path_stack' => [
__DIR__ . '/../view',
],
],
'strategies' => array(
'ViewJsonStrategy',
),
];
공장 :
<?php
namespace Application\Service\Factory;
use Interop\Container\ContainerInterface;
use Zend\ServiceManager\Factory\FactoryInterface;
class UserServiceFactory implements FactoryInterface {
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
$entityManager = $container->get('doctrine.entitymanager.orm_default');
$user = new \Application\Service\UserService($entityManager);
return $user;
}
}
본 서비스 :
<?php
namespace Application\Service;
class UserService
{
protected $entityManager;
function __construct(\Doctrine\ORM\EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function createUser($username, $password)
{
$user = new \Application\Entity\User();
$user->setUserKey($password);
$user->setUserName($username);
$user->setIsAdmin(true);
$this->entityManager->persist($user);
$this->entityManager->flush();
return $user;
}
}
잘하고있는 것 같습니다. 나는 코드를 의미한다. 공장을 통해 DbBuilderController 클래스를 호출하려고 했습니까? –
팩토리 클래스 자체에 대한 세부 정보를 공유하지 않았으므로 더 이상 할 수 없습니다. 팩토리 클래스 '\ Application \ Service \ Factory \ UserServiceFactory :: class'가 올바르게 참조되어 있습니까? 잘못 가리킨 폴더 나 다른 방법으로 잘못 참조 된 폴더에 잘못 명명 될 수 있습니다 ... – Wilt
잘못 참조 된 경우 오류가 발생합니다. 나는 그것을 잘못 의도적으로 참조하려했습니다. 나는 그것을 포함시킬 것이다. – Bluebaron