Laravel 5 RESTful资源路由无法正常工作

时间:2015-05-27 15:40:23

标签: php rest routes laravel-5

我有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调试模式。

2 个答案:

答案 0 :(得分:2)

我试过了代码。它起作用了。确保您已登录。 RoomsController

output

答案 1 :(得分:1)

问题是由Laravel的CSRF保护造成的。

我使用 PostMan 发送请求。它接受GET次请求,但不接受POSTPUT

我使用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)。
我不知道为什么昨天会发生这种情况。也许这是一些愚蠢的错误。