PhlyRestfullyモジュールを使用して、Zend Framework 2 で API を構築しようとしています。問題は、構成が正しいにもかかわらず、ResourceController がリソースへのディスパッチに失敗することです。これは私が応答として得るものです:
The requested controller was unable to dispatch the request.
Controller:
Api\Controller\Locations
No Exception available
以下に私の構成を説明します。
アプリケーション.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__' => 'Api\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'locations' => array(
'type' => 'Segment',
'options' => array(
'route' => '/locations[/[:id]]',
'controller' => 'Api\Controller\Locations',
'defaults' => array(
'controller' => 'Api\Controller\Locations'
)
),
),
),
),
),
),
'view_manager' => array(
'strategies' => array(
'ViewJsonStrategy'
),
),
'phlyrestfully' => array(
'resources' => array(
'Api\Controller\Locations' => array(
'listener' => 'Api\Resource\Location',
'route_name' => 'api/locations'
)
)
),
);
API/リソース/場所.php
namespace Api\Resource;
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/locations
ResourceController が呼び出され、適切なリソースが挿入されるため、ルーティングは正常に機能します。Listener の attach() メソッドが呼び出されますが、イベントが Resource によって起動される代わりに、AbstractRestfulController の onDispatch メソッドが呼び出され、indexAction を使用して LocationsController を実際に定義していないため、404 が返されます。
PhlyRestfully は、提供された ResourceController を介してこれらのリソース コントローラーの存在をエミュレートし、これらのコントローラー クラスを実際に作成する必要はありません。これがモジュールの要点であるためです。
何か案は?