1

アプリに APIGILITY をインストールしようとしています。私はこのチュートリアルに従いました:

https://apigility.org/documentation/recipes/apigility-in-an-existing-zf2-application

apigility 管理者 (www.myapp.dev/apigility) にアクセスしようとすると、「ルーティングによって要求された URL を一致させることができませんでした」というエラーが表示されます。

私の設定は次のとおりです。

'modules' => array(
    'DoctrineModule',
    'DoctrineORMModule',
    'ZfcRbac',              //Keep this at the top
    'Application',          //The applications main functions run from this module

    //APIGILITY
    'ZF\Apigility',
    'ZF\Apigility\Provider',
    'AssetManager',
    'ZF\ApiProblem',
    'ZF\MvcAuth',
    'ZF\OAuth2',
    'ZF\Hal',
    'ZF\ContentNegotiation',
    'ZF\ContentValidation',
    'ZF\Rest',
    'ZF\Rpc',
    'ZF\Versioning',
    'ZF\DevelopmentMode',
    'ZF\Apigility\Admin',
    'ZF\Configuration',

開発者モードを有効にしました。

通常、ルートが存在し、ZfcRbac がルートをブロックしている場合、リダイレクトされます。この場合、ルートにアクセスできないとエラーが発生します。

これをテストする簡単な方法はありますか?

4

2 に答える 2

0

次の手順を実行して、この問題を解決しました。

このチュートリアルでは、ApiGility テンプレートをアプリにコピーすることについては言及していません。これを行う必要があります。私がしたことは、テンプレートを application/config/module.config.php ファイルに追加することでした。

 return [
    'view_manager' => [
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/exception',
        'template_map' => [
            'customer/layout'         => __DIR__ . '/../view/layout/customer-layout.phtml',
            'api/layout'              => __DIR__ . '/../view/layout/api-layout.phtml',
            'layout/layout'           => __DIR__ . '/../view/layout/admin-layout.phtml',

Application モジュールで、ルーティングを確認し、それに応じてテンプレートを切り替えます。

 public function onBootstrap(MvcEvent $e)
    {
    $eventManager        = $e->getApplication()->getEventManager();
    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);

    $e->getApplication()->getEventManager()->attach(
        MvcEvent::EVENT_ROUTE, function(MvcEvent $e) {
            //Set the customer layout
            $needle = $e->getRouteMatch()->getParam('controller');

            $haystack = [
               /* Customer template routes */
            ];

            if (in_array( $needle , $haystack )) {
                $e->getViewModel()->setTemplate('customer/layout');
            }

            //Apigility route
            $haystack = [
                'zf-apigility/ui'
            ];

            if (in_array( $needle , $haystack )) {
                $e->getViewModel()->setTemplate('api/layout');
            }
        }
    );
}

apigility ページにアクセスするには、http ://www.myapp.com/apigility/ui#/ からアクセスします。

これが誰かに役立つことを願っています...

于 2014-09-05T12:52:43.680 に答える