在两个单独的Yii Web应用程序之间传递数据

时间:2014-01-03 11:53:36

标签: php mysql web-services rest yii

我有一个yii应用程序(APP1),以及一个单独的yii应用程序(APP2),我想从 APP1 <下载多行/表/ strong>至 APP2 ,完成一些操作,然后将其发送回 APP1 (同时完成任务 APP2 可能处于脱机状态。)

目前我有一个请求(使用GET),可以从 APP1 中为json对象提供我需要的所有数据。

我不太确定如何从这里开始?有没有人对如何处理这个有任何想法?

  public function actionDownload($id) {
    // Check if id was submitted via GET
    if(!isset($_GET['id']))
        $this->_sendResponse(500, 'Error: Parameter <b>id</b> is missing' );
        $model = AuditLines::model()->findAll(array("condition"=>'line_audit_id='.$_GET['id']));

    if(is_null($model))
        $this->_sendResponse(404, 'No Items found with id '.$_GET['id']);
    else
        $this->_sendResponse(200, CJSON::encode($model));
    }

这让我得到了我需要的所有数据,现在我需要将这些数据放入APP2数据库中的临时表中,然后我可以修改完成后发送回来

**更新** 这里的另一个问题是APP1将在实时服务器上,APP2将在WAMP服务器上托管。 APP2需要从APP1获取数据(表/行),然后在工作完成时离线。一旦作业完成(并且APP2具有互联网连接),它将需要将数据传递回APP1以进行处理 谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

您可以通过创建网络服务来实现这一点我正在向您展示如何使用soap进行操作。
App1

class WebServicesForUserController extends Controller
{
public function actions()
    {
        return array(
        // 'services' will be used in app2 while making soap object
            'services'=>array(
                'class'=>  'CWebServiceAction',

            )
        );
    }
/**
 *@return mixed
 *@soap
 */
public function sendData()
{
// do all your processing here and store data in a variable 
$variable=array('my data');
// then just return the data in the json form
return json_encode($variable);
}
}

APP2 中,您可以调用此网络服务来获取

等数据
class GetMyServiceController extends CController
{

public function actionMyData()
{
// create a soap object
$wsdl='http://path/to/your/app1/function/services';
            $client=new SoapClient($wsdl);
            $result=$client->sendData();
           echo $result
}

}

有关详细信息,请点击 here

答案 1 :(得分:0)

您可以在1个应用程序中打开与不同数据库的多个数据库连接

'components' => array(
    'db' => array(
        'connectionString' => 'mysql:host=dbserver1;dbname=my1db',
        ...
    ),
    'dbadvert' => array(
        'connectionString' => 'mysql:host=adserver2;dbname=advertisingDB',
        'username'         => 'advertuser',
        'password'         => '***********',
        ...
        'class'            => 'CDbConnection'          // DO NOT FORGET THIS!
    ),

来源:http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/#hh0

此外,如果两个应用程序都托管在同一服务器上,则app1可以从受保护路径中的另一个物理位置加载控制器/模型/帮助程序。