1

我需要在調用Apigility數據庫連接的休息服務(例如創建實體的服務)後執行一些操作。我想用Zend Events做到這一點,但我不知道從哪裏開始,因爲Apigility沒有創建任何我能看到的代碼。如果有人能提供一個例子來說明如何做到這一點,那就太好了。我是Zend和Apigility的新手。 在此先感謝亞歷杭德羅· 使用Zend事件進行Apigility數據庫連接的操作ocurr時要做些什麼

+0

Apigility在ZF2的模塊目錄中創建模塊,您可以根據需要修改代碼。要使用事件,我建議你在Module.php onBoostrap事件中附加一個事件,並在你調用其他服務時觸發它,[如何使用事件管理器](http://framework.zend.com/manual/2.0/ en/modules/zend.event-manager.event-manager.html)和[更高級的用法](http://samsonasik.wordpress.com/2013/05/18/zend-framework-2-register-event-listeners -in-configuration-file /) – SmasherHell

+0

這就是Apigility在創建數據庫連接休息服務時所創建的只有兩個類EntityNameCollections和EntityNameEntity,至此沒有任何代碼,所以我不知道是否需要觸發。我可以創建自己的資源類,但我不知道它是否會替代apigility正在執行的操作。 – aexposito

+1

在所有情況下,您的API都像標準zf2模塊一樣構建,使用module.config.php,Module.php。你的實體和集合都在'模型'層上,並且應該包含業務邏輯(你必須手動添加,因爲如果你有特殊的邏輯來實現,apigility無法猜測。順便說一下,框架必須加載模塊,這樣做,Module.php被調用,你可以在那裏附加事件,然後觸發它們到實體或你想要的任何類。ZF2觸發mvc事件返回一個Response對象。 – SmasherHell

回答

0

代碼爲例,以一個邏輯附加到MvcEvent

在模塊/ APIName/Module.php

<?php 
namespace APIName; 

use Zend\Mvc\MvcEvent; 

class Module 
{ 
    public function onBoostrap($e) 
    { 
     $eventManager  = $e->getApplication()->getEventManager(); 
     $serviceManager  = $e->getApplication()->getServiceManager(); 

     $eventManager->attach(MvcEvent::EVENT_ROUTE, function($event) use($serviceManager){ 
      $route = $event->getRouteMatch()->getMatchedRouteName(); 
      // Do some stuff, tests, etc... 
     }, -1100); // set low priority to be sure that route is defined 
    } 
} 

你的事件將路由時,可以自動由框架觸發。

+0

我會檢查這個,謝謝 – aexposito

+0

非常感謝,它的工作,現在我唯一的疑問是如何區分確切的路線,例如:/東西從/東西/ 2,如果它是GET或POST – aexposito

相關問題