我有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
时,它会返回预期结果
有RoomsController@index
方法:
public function index() {
$user = Auth::user();
$currentUserRooms = RoomUsers::where('user_id', '=', $user->id)->get();
return response($currentUserRooms);
}
问题:
当我尝试POST
到同一个URI(/api/room
)时,我得到 500内部服务器错误。
有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调试模式。
答案 0 :(得分:2)
我试过了代码。它起作用了。确保您已登录。
答案 1 :(得分:1)
问题是由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 32bit)。
我不知道为什么昨天会发生这种情况。也许这是一些愚蠢的错误。