Laravel 5 RESTful 资源路由不工作
Laravel 5 RESTful resource route not working
我有Laravel 5条资源路线:
Route::group(['middleware' => 'auth'], function() {
Route::resource('api/room', 'RoomsController');
// ...
});
RoomsController
是用 php artisan make:controller
命令生成的。
<?php namespace App\Http\Controllers;
use Auth;
use App\Room;
use App\RoomUsers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class RoomsController extends Controller {
// ...
}
index
路线工作。当我 GET
api/room
时,它 returns 预期结果。
有RoomsController@index
方法:
public function index() {
$user = Auth::user();
$currentUserRooms = RoomUsers::where('user_id', '=', $user->id)->get();
return response($currentUserRooms);
}
问题:
当我尝试 POST
到相同的 URI (/api/room
) 时,我得到 500 Internal Server Error.
有RoomsController@store
方法(应该在POST
请求到来时调用)。
public function store() {
return response('is Working') // But isn't working
}
我在php.ini文件中设置了这些选项,但还是看不到错误信息。它仅显示“500 内部服务器错误”
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
我也启用了 Laravel 5 调试模式。
我尝试了代码。它奏效了。确保您已登录。
问题是由 Laravel 的 CSRF 保护引起的。
我使用 PostMan 发送请求。它接受 GET
请求,但不接受 POST
或 PUT
.
我使用了 this page 中的修复来禁用对这些路由的 CSRF :
// app/Http/Middleware/VerifyCsrfToken.php
// ...
class VerifyCsrfToken extends BaseVerifier {
private $openRoutes = ['api/room', 'api/message'];
public function handle($request, Closure $next) {
foreach ($this->openRoutes as $route) {
if ($request->is($route)) {
return $next($request);
}
}
return parent::handle($request, $next);
}
}
关于报错:
昨天我启用了所有错误报告选项并多次重启 apache2 服务。但是 PostMan.
中没有显示错误描述或堆栈跟踪
今天一觉醒来测试了一下。它刚刚起作用。现在我有 laravel 错误报告和堆栈跟踪。我没有关闭或重新启动机器。 (Lubuntu 14.04 32 位).
我不知道为什么昨天会发生这种情况。也许这是一些愚蠢的错误。
我有Laravel 5条资源路线:
Route::group(['middleware' => 'auth'], function() {
Route::resource('api/room', 'RoomsController');
// ...
});
RoomsController
是用 php artisan make:controller
命令生成的。
<?php namespace App\Http\Controllers;
use Auth;
use App\Room;
use App\RoomUsers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class RoomsController extends Controller {
// ...
}
index
路线工作。当我 GET
api/room
时,它 returns 预期结果。
有RoomsController@index
方法:
public function index() {
$user = Auth::user();
$currentUserRooms = RoomUsers::where('user_id', '=', $user->id)->get();
return response($currentUserRooms);
}
问题:
当我尝试 POST
到相同的 URI (/api/room
) 时,我得到 500 Internal Server Error.
有RoomsController@store
方法(应该在POST
请求到来时调用)。
public function store() {
return response('is Working') // But isn't working
}
我在php.ini文件中设置了这些选项,但还是看不到错误信息。它仅显示“500 内部服务器错误”
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
我也启用了 Laravel 5 调试模式。
我尝试了代码。它奏效了。确保您已登录。
问题是由 Laravel 的 CSRF 保护引起的。
我使用 PostMan 发送请求。它接受 GET
请求,但不接受 POST
或 PUT
.
我使用了 this page 中的修复来禁用对这些路由的 CSRF :
// app/Http/Middleware/VerifyCsrfToken.php
// ...
class VerifyCsrfToken extends BaseVerifier {
private $openRoutes = ['api/room', 'api/message'];
public function handle($request, Closure $next) {
foreach ($this->openRoutes as $route) {
if ($request->is($route)) {
return $next($request);
}
}
return parent::handle($request, $next);
}
}
关于报错:
昨天我启用了所有错误报告选项并多次重启 apache2 服务。但是 PostMan.
今天一觉醒来测试了一下。它刚刚起作用。现在我有 laravel 错误报告和堆栈跟踪。我没有关闭或重新启动机器。 (Lubuntu 14.04 32 位).
我不知道为什么昨天会发生这种情况。也许这是一些愚蠢的错误。