我想弄清楚我有一个问题。我在同一台服务器上有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没有暴露。当发出post请求时,siteB收到的错误是404未找到。如果我在siteA上设置了一个简单的get函数来返回一些东西,那么siteB就可以毫无问题地执行这个API调用。当我试图从站点b到站点a发布一些东西时,问题就出现了。
另外,当我传递$project对象时,是否也有办法发送它的相关模型?$project与其他一些模型有一对多的关系,理想情况下,我希望获得相关数据。
我认为你只需要急于加载关系
public function postProject()
{
//dd($project);
Project::with('relation1', 'relation2')->find($id);
}