我在应用程序模块配置中有以下内容:
'controllers' => [
'factories' => [
Application\Controller\IndexController::class => Application\Controller\IndexControllerFactory::class
],
],
这很好用。现在我的serve module
我几乎一样:
'controllers' => array(
/**
'invokables' => array(
'Serve\Controller\Index' => 'Serve\Controller\IndexController',
),
*/
'factories' => array(
Controller\IndexController::class => Serve\Controller\IndexControllerFactory::class
)
),
当我加载主页时,我通过api访问服务控制器。这样做我在主页上遇到了这个问题:
Serve\Controller\Index (resolves to invalid controller class or alias: Serve\Controller\Index)
有趣的是,当我这样做时,它有效:
'controllers'=>array(
'invokables' => array(
'Serve\Controller\Index' => 'Serve\Controller\IndexController',
)),
不确定这里是不是错了
更新:
这似乎有效:
'factories' => array(
'Serve\Controller\Index' => IndexControllerFactory::class
)
然而我喜欢使用::class
语法
答案 0 :(得分:1)
当您映射到控制器时,问题出在您的路由配置中: -templates
-admin
base.html
但您从未在TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates"),],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'sekizai.context_processors.sekizai',
'cms.context_processors.cms_settings',
],
},
},
]
中使用该特定密钥注册该控制器,或者您使用了错误的密钥值" 控制器"在控制器映射中指定FQCN时,在路径中。
Serve\Controller\Index
或者在您的路线中,配置不使用module.config
但使用FQCN,以便它直接使用Factory而不是您设置的别名。像:
// module.config
'aliases' => [
'Serve\Controller\Index' => Serve\Controller\IndexController:class,
],
'factories' => [
Serve\Controller\IndexController:class => Serve\Controller\IndexControllerFactory::class,
],
我继续使用FQCN在工厂映射中映射我的类,如果我想用另一个名称调用别名,则添加别名。因此,您现在可以使用FQCN或其任何别名,例如:Serve\Controller\Index