2014-09-04 2 views
1

Я пытаюсь установить APIGILITY в своем приложении. Я следовал за этот учебник:ZF2 - 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 блокирует маршрут, я перенаправляюсь. В этом случае, когда маршрут недоступен, я получаю ошибку.

Есть ли простой способ проверить это?

ответ

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

Надеется, что это помогает кому-то ...

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 (экрана приветствия)

+0

имеет смысл, спасибо за добавление информации! – HappyCoder

Смежные вопросы