从同一服务器调用路由会导致无限循环

时间:2018-01-24 23:20:48

标签: php api server request

开始之前

我使用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可以正常工作)。

有人可以给我一个暗示导致冻结的原因吗?

1 个答案:

答案 0 :(得分:1)

这与PHP处理请求的方式有明确的关系。我通过设置Apache配置localhost:8000将我的项目植根到同一位置httpd.conf,它正在工作,我可以在我的路线上发出请求。

如果有任何善意的人可以在这里贴上关于我在PHP网络服务器上的请求发生的事情的技术细节......