开始之前
我使用Laravel作为示例,但实际上我用手工制作的MVC创建了一个小项目,问题仍然存在,所以这与框架无关。
上下文
我使用php artisan serve
,相当于php -S localhost:8000 -t public
来启动我的网络应用。我不使用Apache(可能是一个提示?)。
客户端(人)通过其Web浏览器请求页面/user
。以下是响应此端点的控制器的外观:
routes.php文件
<?php
Route::resource('user', 'UserController');
?>
UserController.php
<?php
namspace App\Http\Controller;
use Illuminate\Http\Request;
use App\User;
class UserController {
public function index( Request $request ) {
$users = User::all();
if( $request->wantsJson() ) {
return response()->json($users, 200);
}
else {
return view('user.index')->with('users', $users);
}
}
}
?>
此代码没有错,一切正常。
我想建立一个“商店”机制,只有我的api端点负责提供数据。所以这是变化:
api.php
<?php
Route::group(['prefix' => 'v1'], function() {
Route::resource('user', 'UserApiController');
});
?>
UserApiController.php
<?php
namespace App\Http\Controller;
use Illuminate\Http\Request;
use App\User;
class UserApiController {
public function index() {
return response()->json(User::all(), 200);
}
}
?>
UserController.php
<?php
namespace App\Http\Controller;
use Illuminate\Http\Request;
use App\User;
class UserController {
public function index() {
return view('user.index')->with('users', User::all());
}
}
&GT;
重现问题
要这样做,请纠正我,如果我走错路径,我的端点/用户应该从/ api / v1 / user请求数据,然后将数据提供给视图并返回Http响应。所以这是我在UserController.php
上修改的内容:
UserController.php
<?php
namespace App\Http\Controller;
use Illuminate\Http\Request;
use App\User;
use GuzzleHttp\Client;
class UserController {
public function index() {
$client = new Client;
$response = $client->get(url('/api/v1/user'));
return view('user.index')->with('users', User::all());
}
}
?>
对我来说,端点将从客户端(人)接收请求,然后向api端点发送第二个请求,获取json数据,解析它(使用$data = $response->getBody()->getContents();
GuzzleHttp方法),然后提供它在视图中(使用return view('user.index')->with('users', $data);
。
问题
服务器实际上是无限循环,我不明白在这个过程中失败了什么。请注意,从另一台服务器调用api(例如https://ipapi.co/json
可以正常工作)。
有人可以给我一个暗示导致冻结的原因吗?
答案 0 :(得分:1)
这与PHP处理请求的方式有明确的关系。我通过设置Apache配置localhost:8000
将我的项目植根到同一位置httpd.conf
,它正在工作,我可以在我的路线上发出请求。
如果有任何善意的人可以在这里贴上关于我在PHP网络服务器上的请求发生的事情的技术细节......