我试图使用phlyrest模块来构建Zend框架2的API。问题是,虽然我有一个正确的配置,但ResourceController无法调度到Resource。这是我得到的响应:
The requested controller was unable to dispatch the request.
Controller:
ApiControllerLocations
No Exception available
我将在下面描述我的配置:
application.php
'modules' => array(
'PhlyRestfully',
'Api',
'Application',
)
Api/config/module.config.php
return array(
'router' => array(
'routes' => array(
'api' => array(
'type' => 'Literal',
'options' => array(
'route' => '/api',
'defaults' => array(
'__NAMESPACE__' => 'ApiController',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'locations' => array(
'type' => 'Segment',
'options' => array(
'route' => '/locations[/[:id]]',
'controller' => 'ApiControllerLocations',
'defaults' => array(
'controller' => 'ApiControllerLocations'
)
),
),
),
),
),
),
'view_manager' => array(
'strategies' => array(
'ViewJsonStrategy'
),
),
'phlyrestfully' => array(
'resources' => array(
'ApiControllerLocations' => array(
'listener' => 'ApiResourceLocation',
'route_name' => 'api/locations'
)
)
),
);
Api/资源/Location.php namespace ApiResource;
class Location extends AbstractListenerAggregate
{
public function attach(EventManagerInterface $events)
{
$this->listeners[] = $events->attach('fetch', array($this, 'onFetch'));
$this->listeners[] = $events->attach('fetchAll', array($this, 'onFetchAll'));
}
public function onFetchAll(ResourceEvent $e)
{
var_dump($e);
}
public function onFetch(ResourceEvent $e)
{
var_dump($e);
}
}
我省略了一些为了简洁而不必要的用法和其他行。
URL:
/api/位置路由工作正常,因为调用了resourceconcontroller并注入了适当的Resource。调用侦听器上的attach()方法,但不是由资源触发的事件,而是调用AbstractRestfulController的onDispatch方法,它返回404,因为我实际上没有使用indexAction定义LocationsController。
这是我的理解,phlyrest通过提供的ResourceController模拟这些资源控制器的存在,你不需要实际创建这些控制器类,因为这是整个模块的重点。
任何想法?
删除路由配置中的默认操作
当我忘记了控制器中方法的 Action
后缀时,这个错误发生在我身上。