Laravel的两个独立实例之间的API

时间:2016-08-18 21:43:47

标签: php laravel laravel-5.2

我想弄清楚我遇到的问题。我在同一台服务器上有2个laravel设置,每个都是通过vhosts控制的独立站点。

SiteA需要充当SiteB的API。因此,在SiteA中,我通过执行

来设置API
Route::group(['prefix' => 'api/v1'], function () {
    Route::post('postProject', array('as' => 'postProject', 'uses' => 'APIController@postProject'));
});

目前,控制器功能就是这个

public function postProject(Project $project)
{
    dd($project);
}

所以在SiteB中我想调用这个API。因此,我设置了一个包含项目对象的路径(我已尝试过get和post)

Route::get('projects/{projects}/postProject', array('as' => 'projects.postProject', 'uses' => 'APIController@postProject'));

此控制器功能执行以下操作

public function postProject($project)
{
    $client = new GuzzleHttp\Client();
    $req = $client->request('POST', 'http://localhost/api/v1/postProject', [
        'body' => $project,
        'headers' => [
            'Content-Type' => 'text/xml',
            'Content-Length' => strlen($project),
        ]
    ]);

    $output = $req->getBody()->getContents();

    return $output;
}

我有localhost作为示例url所以真正的url没有暴露。错误的siteB在发出post请求时收到404未找到。如果在siteA上我设置了一个返回内容的简单get函数,则siteB可以毫无问题地执行此API调用。当我尝试将某些内容从siteB发布到siteA时,问题就出现了。

此外,当我传递$ project对象时,有没有办法通过其相关模型发送? $ project与其他一些模型有一对多的关系,理想情况下我想获取相关数据。

1 个答案:

答案 0 :(得分:1)

我认为你只需要加载关系

public function postProject()
{
    //dd($project);
    Project::with('relation1', 'relation2')->find($id);
}