Laravel API 404 错误
Posted
技术标签:
【中文标题】Laravel API 404 错误【英文标题】:Laravel API 404 error 【发布时间】:2017-12-30 20:54:00 【问题描述】:我正在使用 Laravel 5.4 制作简单的 API,但我遇到了问题。我创建了路由和一些测试数据,但是当我通过输入localhost:8888/projectname/api/v1/meeting
测试路由是否与 Postman 一起正常工作时,它显示了error 404 page not found
。我做错了什么?
routes/api.php
<?php
Route::group(['prefix' => 'v1'], function()
Route::resource('meeting', 'MeetingController', [
'except' => ['edit', 'create']
]);
Route::resource('meeting/registration', 'RegistrationController', [
'only' => ['store', 'destroy']
]);
Route::post('user', [
'uses' => 'AuthController@store'
]);
Route::post('user/signin', [
'uses' => 'AuthController@signin'
]);
);
会议控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class MeetingController extends Controller
public function __construct()
// $this->middleware('name');
public function index()
return "It works!";
public function store(Request $request)
return "It works!";
public function show($id)
return "It works!";
public function update(Request $request, $id)
return "It works!";
public function destroy($id)
return "It works!";
注册控制器
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class RegistrationController extends Controller
public function store(Request $request)
return "It works!";
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
return "It works!";
AuthController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class AuthController extends Controller
public function store(Request $request)
return "It works!";
public function signin(Request $request)
return "It works!";
命令输出php artisan route:list
:
+--------+-----------+--------------------------------------------+----------------------+-----------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+--------------------------------------------+----------------------+-----------------------------------------------------+------------+
| | GET|HEAD | / | | Closure | web |
| | POST | api/v1/meeting | meeting.store | App\Http\Controllers\MeetingController@store | api |
| | GET|HEAD | api/v1/meeting | meeting.index | App\Http\Controllers\MeetingController@index | api |
| | POST | api/v1/meeting/registration | registration.store | App\Http\Controllers\RegistrationController@store | api |
| | DELETE | api/v1/meeting/registration/registration | registration.destroy | App\Http\Controllers\RegistrationController@destroy | api |
| | DELETE | api/v1/meeting/meeting | meeting.destroy | App\Http\Controllers\MeetingController@destroy | api |
| | PUT|PATCH | api/v1/meeting/meeting | meeting.update | App\Http\Controllers\MeetingController@update | api |
| | GET|HEAD | api/v1/meeting/meeting | meeting.show | App\Http\Controllers\MeetingController@show | api |
| | POST | api/v1/user | | App\Http\Controllers\AuthController@store | api |
| | POST | api/v1/user/signin | | App\Http\Controllers\AuthController@signin | api |
+--------+-----------+--------------------------------------------+----------------------+-----------------------------------------------------+------------+
【问题讨论】:
api.php
路由已经以 /api
为前缀。您无需自己再次添加。根据您当前的设置,您的路线是 localhost:8888/projectname/api/api/v1/meeting
我也试过删除带有路由的 api,它显示了同样的错误
您的请求网址中不需要/projectname
。
试过localhost:8888/api/v1/meeting
?
那么,localhost:8888/project-folder/project-name/public/api/v1/meeting
呢?
【参考方案1】:
我希望在客户端添加 Accept application/json 标头以获取 JSON 响应。这是最直接的方法,但您会惊讶于有多少开发人员忘记了它,或者甚至不知道它。
【讨论】:
【参考方案2】:请不要在你的路线中使用 /api 保持简单,就像
Route::group(['prefix' => 'v1'], function() //code goes here
php artisan route:list
这将列出您的所有路线,如果路线中有任何错误,则不会在此处列出。
【讨论】:
【参考方案3】:在 Laravel 5.4 中,您的 routes/api.php
应该如下所示:
<?php
Route::prefix('v1')->group(function ()
Route::resource('meeting', 'MeetingController', [
'except' => ['edit', 'create']
]);
Route::resource('meeting/registration', 'RegistrationController', [
'only' => ['store', 'destroy']
]);
Route::post('user', [
'uses' => 'AuthController@store'
]);
Route::post('user/signin', [
'uses' => 'AuthController@signin'
]);
);
有关更多信息,请访问他们的文档here。
【讨论】:
你说得对,我改了,但还是出现 404 问题。也许还有其他问题不是 routes/api.php 文件。 啊,你能给我你的服务器主机配置吗?【参考方案4】:与 5.4 版一样,api 已添加到端点中,因此无需在 url 中再次添加“api”。
请更改自:
Route::group(['prefix' => 'api/v1'], function()
到
Route::group(['prefix' => 'v1'], function()
【讨论】:
这不是这条路线的问题,因为我按你说的改了它,仍然有同样的问题 @KonradUciechowski 好的,请尝试使用 localhost:8888/projectname/index.php/api/v1/meeting 你在使用php artisan serve
or apache/nginx/...?以上是关于Laravel API 404 错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Api Route 在 laravel 应用程序中不起作用,显示错误(未找到 404 错误)?
Laravel localhost API错误404 / public正在运行