ZF2 中的路由问题:控制器未映射
Routing problems in ZF2 : Controller not mapped
我正在尝试在 Zf2 中创建一个简单的 CRUD 来了解它,但我在路由我拥有的唯一控制器时遇到了问题。我有这个错误;
"The requested controller could not be mapped to an existing controller class".
我正在尝试呼叫这条路线:http://zf2.local/Listapp
这是我的结构:
module/Listapp/src/Listapp/Controller/ListappController.php
命名空间是namespace Listapp\Controller;
这是我的自动加载器配置:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
// Autoload Listapp classes
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
// Autoload ListappController classes
'ListappController' => __DIR__ . '/src/Listapp',
)
)
);
}
这是我的 module.config.php
:
return array(
'controllers' => array(
'invokables' => array(
'Listapp\Controller\Listapp' => 'Listapp\Controller\ListappController'
)
),
'router' => array(
'routes' => array(
'listapp' => array(
'type' => 'segment',
'options' => array(
'route' => '/[:controller[/:action][/:id]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Listapp\Controller\Listapp',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'Listapp' => __DIR__ . '/../view',
),
), );
如有任何帮助,我们将不胜感激!
编辑:
这是我的控制器中的代码(减去其他 CRUD 函数):
namespace Listapp\Controller;
use Zend\Mvc\Controller\AbstractActionController;
class ListappController extends AbstractActionController
{
public function indexAction()
{
}
}
因此,为了进一步解释我的评论,通过在您的路线中包含一个 :controller
段,您已经告诉 ZF 尝试将 URL 中的第一件事与控制器匹配的东西管理器可以加载(在您的情况下,是您控制器可调用项中的一个键)。您在路线中定义的控制器默认值仅在您访问 http://zf2.local/
时适用。
所以对您而言,最快的解决方法是将您的配置更改为:
'controllers' => array(
'invokables' => array(
'Listapp' => 'Listapp\Controller\ListappController'
)
),
'Listapp' in the URL 将匹配此控制器,一切都会如您所愿。
一般来说,如果你避免在路由中使用 :controller
并且每个控制器至少有一个路由,那么事情会更清楚,例如:
'controllers' => array(
'invokables' => array(
'Listapp\Controller\Listapp' => 'Listapp\Controller\ListappController'
)
),
'router' => array(
'routes' => array(
'listapp' => array(
'type' => 'segment',
'options' => array(
'route' => '/listapp[/:action[/:id]]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Listapp\Controller\Listapp',
'action' => 'index',
),
),
),
),
),
我正在尝试在 Zf2 中创建一个简单的 CRUD 来了解它,但我在路由我拥有的唯一控制器时遇到了问题。我有这个错误;
"The requested controller could not be mapped to an existing controller class".
我正在尝试呼叫这条路线:http://zf2.local/Listapp
这是我的结构:
module/Listapp/src/Listapp/Controller/ListappController.php
命名空间是namespace Listapp\Controller;
这是我的自动加载器配置:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
// Autoload Listapp classes
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
// Autoload ListappController classes
'ListappController' => __DIR__ . '/src/Listapp',
)
)
);
}
这是我的 module.config.php
:
return array(
'controllers' => array(
'invokables' => array(
'Listapp\Controller\Listapp' => 'Listapp\Controller\ListappController'
)
),
'router' => array(
'routes' => array(
'listapp' => array(
'type' => 'segment',
'options' => array(
'route' => '/[:controller[/:action][/:id]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Listapp\Controller\Listapp',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'Listapp' => __DIR__ . '/../view',
),
), );
如有任何帮助,我们将不胜感激!
编辑: 这是我的控制器中的代码(减去其他 CRUD 函数):
namespace Listapp\Controller;
use Zend\Mvc\Controller\AbstractActionController;
class ListappController extends AbstractActionController
{
public function indexAction()
{
}
}
因此,为了进一步解释我的评论,通过在您的路线中包含一个 :controller
段,您已经告诉 ZF 尝试将 URL 中的第一件事与控制器匹配的东西管理器可以加载(在您的情况下,是您控制器可调用项中的一个键)。您在路线中定义的控制器默认值仅在您访问 http://zf2.local/
时适用。
所以对您而言,最快的解决方法是将您的配置更改为:
'controllers' => array(
'invokables' => array(
'Listapp' => 'Listapp\Controller\ListappController'
)
),
'Listapp' in the URL 将匹配此控制器,一切都会如您所愿。
一般来说,如果你避免在路由中使用 :controller
并且每个控制器至少有一个路由,那么事情会更清楚,例如:
'controllers' => array(
'invokables' => array(
'Listapp\Controller\Listapp' => 'Listapp\Controller\ListappController'
)
),
'router' => array(
'routes' => array(
'listapp' => array(
'type' => 'segment',
'options' => array(
'route' => '/listapp[/:action[/:id]]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Listapp\Controller\Listapp',
'action' => 'index',
),
),
),
),
),