Laravel 5 API 路由向前端返回 500 错误
Laravel 5 API Routes Returning a 500 Error to Frontend
我正在尝试在 Laravel 5 开始一个新项目,但我 运行 遇到了一些路由问题。我以前用 Laravel 4 来做类似的事情,但我是 laravel 5 的新手。
我想做的是创建一个演示应用程序,其中包含 AngularJS 前端,Laravel 作为后端服务器,API 用于数据。我已经 gulp 将我的前端构建到 laravel/public/app,所以我的结构如下所示:
laravel
- app/
- frontend-src/
- public/
-- app/
--- index.php
--- js/
--- css/
--- views/
我将 Laravel 配置为在 public/app 中查找从 public/app 开始的视图,就像在 laravel/config/view 中这样。php:
'paths' => array(__DIR__.'/../public/app'),
然后我配置我的路由以加载“/”的 Angular 索引页面和我的 API 调用的路由组,如下所示:
Route::get('/', function () {
return view('index');
});
Route::group(array('prefix' => 'api'), function() {
Route::resource('projects', 'ProjectController');
});
我在开发中通过使用 artisan 服务器和 运行 使用 php artisan serve
为它提供服务 - 这工作正常。索引页面加载,我的 Angular 应用程序可见,主页看起来正确。
但是,当我在主页中添加对 GET /api/projects 的服务调用时,服务器响应 500 错误
GET http://localhost:8000/api/projects 500 (Internal Server Error)
起初我以为我命名错误或者路由没有设置,所以我 运行 命令 php atisan route:list - 但路由看起来不错:
+--------+----------+------------------------------+----------------------+------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------------+----------------------+------------------------------------------------+------------+
| | GET|HEAD | / | | Closure | |
| | GET|HEAD | api/projects | api.projects.index | App\Http\Controllers\ProjectController@index | |
| | POST | api/projects | api.projects.store | App\Http\Controllers\ProjectController@store | |
| | GET|HEAD | api/projects/create | api.projects.create | App\Http\Controllers\ProjectController@create | |
| | DELETE | api/projects/{projects} | api.projects.destroy | App\Http\Controllers\ProjectController@destroy | |
| | PATCH | api/projects/{projects} | | App\Http\Controllers\ProjectController@update | |
| | GET|HEAD | api/projects/{projects} | api.projects.show | App\Http\Controllers\ProjectController@show | |
| | PUT | api/projects/{projects} | api.projects.update | App\Http\Controllers\ProjectController@update | |
| | GET|HEAD | api/projects/{projects}/edit | api.projects.edit | App\Http\Controllers\ProjectController@edit | |
+--------+----------+------------------------------+----------------------+------------------------------------------------+------------+
在ProjectController中,index方法只有一行:
return Response::json(array('success' => true));
有人看到我遗漏了什么,或者我的 /api 路线不工作吗?
感谢大家的宝贵时间!
事实证明,解决方案非常简单,分为两部分。
首先,控制器方法(在本例中为 ProjectController@index)必须 return 某些东西。其次,当我检查开发人员控制台中的“网络”选项卡时,我发现了一个错误——500 错误是return在完整响应中获取更多信息。
显然,要在 Laravel 5 中使用 "Response::json(...)",您必须通过
包含它
use Response;
或命名空间 class 并写入 \Response::json(...)
.
我通过 use 语句包含它,API 调用 return 按预期进行。
您必须将请求设置为 Get 或 Post,如下所示...
Route::get('/', function () {
return view('index');
});
Route::group(array('prefix' => 'api'), function() {
Route::resource('projects', 'ProjectController');
Route::get('projects','ProjectController@projects');
});
现在路由允许您 return 来自函数项目的 json 代码。
PS:如果这不起作用,请告诉我。
我正在尝试在 Laravel 5 开始一个新项目,但我 运行 遇到了一些路由问题。我以前用 Laravel 4 来做类似的事情,但我是 laravel 5 的新手。
我想做的是创建一个演示应用程序,其中包含 AngularJS 前端,Laravel 作为后端服务器,API 用于数据。我已经 gulp 将我的前端构建到 laravel/public/app,所以我的结构如下所示:
laravel
- app/
- frontend-src/
- public/
-- app/
--- index.php
--- js/
--- css/
--- views/
我将 Laravel 配置为在 public/app 中查找从 public/app 开始的视图,就像在 laravel/config/view 中这样。php:
'paths' => array(__DIR__.'/../public/app'),
然后我配置我的路由以加载“/”的 Angular 索引页面和我的 API 调用的路由组,如下所示:
Route::get('/', function () {
return view('index');
});
Route::group(array('prefix' => 'api'), function() {
Route::resource('projects', 'ProjectController');
});
我在开发中通过使用 artisan 服务器和 运行 使用 php artisan serve
为它提供服务 - 这工作正常。索引页面加载,我的 Angular 应用程序可见,主页看起来正确。
但是,当我在主页中添加对 GET /api/projects 的服务调用时,服务器响应 500 错误
GET http://localhost:8000/api/projects 500 (Internal Server Error)
起初我以为我命名错误或者路由没有设置,所以我 运行 命令 php atisan route:list - 但路由看起来不错:
+--------+----------+------------------------------+----------------------+------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------------+----------------------+------------------------------------------------+------------+
| | GET|HEAD | / | | Closure | |
| | GET|HEAD | api/projects | api.projects.index | App\Http\Controllers\ProjectController@index | |
| | POST | api/projects | api.projects.store | App\Http\Controllers\ProjectController@store | |
| | GET|HEAD | api/projects/create | api.projects.create | App\Http\Controllers\ProjectController@create | |
| | DELETE | api/projects/{projects} | api.projects.destroy | App\Http\Controllers\ProjectController@destroy | |
| | PATCH | api/projects/{projects} | | App\Http\Controllers\ProjectController@update | |
| | GET|HEAD | api/projects/{projects} | api.projects.show | App\Http\Controllers\ProjectController@show | |
| | PUT | api/projects/{projects} | api.projects.update | App\Http\Controllers\ProjectController@update | |
| | GET|HEAD | api/projects/{projects}/edit | api.projects.edit | App\Http\Controllers\ProjectController@edit | |
+--------+----------+------------------------------+----------------------+------------------------------------------------+------------+
在ProjectController中,index方法只有一行:
return Response::json(array('success' => true));
有人看到我遗漏了什么,或者我的 /api 路线不工作吗? 感谢大家的宝贵时间!
事实证明,解决方案非常简单,分为两部分。 首先,控制器方法(在本例中为 ProjectController@index)必须 return 某些东西。其次,当我检查开发人员控制台中的“网络”选项卡时,我发现了一个错误——500 错误是return在完整响应中获取更多信息。
显然,要在 Laravel 5 中使用 "Response::json(...)",您必须通过
包含它use Response;
或命名空间 class 并写入 \Response::json(...)
.
我通过 use 语句包含它,API 调用 return 按预期进行。
您必须将请求设置为 Get 或 Post,如下所示...
Route::get('/', function () {
return view('index');
});
Route::group(array('prefix' => 'api'), function() {
Route::resource('projects', 'ProjectController');
Route::get('projects','ProjectController@projects');
});
现在路由允许您 return 来自函数项目的 json 代码。 PS:如果这不起作用,请告诉我。