項目使用的是ZendFramework2 經常有訪問另外Controller下Action的需求,常見的方法是使用CURL
先上代碼
publicfunction onDispatch(MvcEvent$e)
{
//可在此獲取dispatch params 如 $this->params('action')
return parent::onDispatch($e); // TODO: Change the autogenerated stub
}
public function DispatchAction() {
try {
//開啓事務
$this->getDbAdapter()->getDriver()->getConnection()->beginTransaction();
//同時可在此爲請求設置參數 相當於$_POST
$request = $this->getRequest();
$request->getPost()->set('msg', 'test');
//Test\Controller\Index 爲路由controller名 array裏面參數如訪問的action名等其他自定義參數
$var = $this->forward()->dispatch('Test\Controller\Index', array(
'action' => 'CallBack',
'controller'=>'22'
));
//提交事務
$this->getDbAdapter()->getDriver()->getConnection()->commit();
return $var;
} catch (\Exception $e) {
return new JsonModel(array('result'=>false,'msg'=>$e->getMessage()));
}
}
//dispatch調用的方法
public function CallBackAction() {
try {
//判斷是否已經開啓了事務操作
if(!$this->getDbAdapter()->getDriver()->getConnection()->inTransaction()){
$this->getDbAdapter()->getDriver()->getConnection()->beginTransaction();
}
$request = $this->getRequest();
//初始化model
$userModel = new UserModel($this->getDbadapter());
$sql = "delete from user_list";
//調用封裝好的數據庫操作方法 執行SQL語句
$ret = $userModel->exec($sql);
return new JsonModel(array('result'=>true,'msg'=>$_POST,'data'=>$request->getPost('msg')));
} catch (\Exception $e) {
return new JsonModel(array('result'=>false,'msg'=>$e->getMessage()));
}
相比於傳統CURL的優點
- 保持了兩邊事務的一致性
- 調試代碼更爲明瞭,可控