ZF2 - 安装在自己的应用程序ApiGility - 路线不工作(ZF2 - ApiGilit

2019-10-20 21:17发布

我试图在我的应用程序安装APIGILITY。 我按照这个教程:

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

当我试图访问apigility管理员:www.myapp.dev/apigility我得到一个错误“的请求的网址无法通过路由匹配”。

我的配置如下:

'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阻塞的路线,我重新定向。 在这种情况下,当路线无法访问我的错误。

有一个简单的方法来测试呢?

Answer 1:

要在HappyCoder自己的答案跟进,你可以匹配ZF-apigility模块的所有与航线

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) {
            // Route matched
            $route_name = $e->getRouteMatch()->getMatchedRouteName();

            // If apigility - set correct layout
            if(preg_match('/^zf-apigility/', $route_name)) {
                $e->getViewModel()->setTemplate('layout/api-layout');
            }
        }
    );
}

在做这种方式 - 它会设置适当的布局为所有apigility意见,包括/ apiligity(欢迎屏幕)



Answer 2:

我用以下方法来解决这个问题:

本教程只字不提复制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',

在应用程序模块我检查路由和相应切换模板:

 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#/

希望这可以帮助别人...



文章来源: ZF2 - ApiGility installed in my own app - route not working