我想弄清楚我遇到的问题。我在同一台服务器上有2个laravel设置,每个都是通过vhosts控制的独立站点。
SiteA需要充当SiteB的API。因此,在SiteA中,我通过执行
来设置APIRoute::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与其他一些模型有一对多的关系,理想情况下我想获取相关数据。
答案 0 :(得分:1)
我认为你只需要加载关系
public function postProject()
{
//dd($project);
Project::with('relation1', 'relation2')->find($id);
}