我试图在Laravel中创建一个基本的API,但无法通过它保存或删除任何数据


I am trying to create a basic API in Laravel but not able to save or delete any data through it

我是一个完全的Laravel初学者,所以我不确定我做得对,但我整天都在努力。下面是我的代码:

控制器:

<?php namespace virtualine'Http'Controllers;
use View;
use Form;
use Response;
use virtualine'Post;
use virtualine'Comment;

use virtualine'Http'Requests;
use virtualine'Http'Controllers'Controller;
use Illuminate'Http'Request;
class PostController extends Controller {
    public function index()
    {
        // $post = Post::orderBy('created_at', 'desc')->first();
        $post = Post::get();
        return Response::json($post);
        //return View::make('posts.index')
        //  ->with('posts', $posts);
    }
    public function create()
    {
        // return View::make('posts.create');
    }
    public function store()
    {
        Post::create(array(
            'question' => Input::get('question')
        ));
        return Response::json(array('success' => true));
    }
    public function show($id)
    {
        $post = Post::find($id);
        $comments = Comment::GetComments($id)->get();
        return Response::json(['question' => $post->question, "comments" => $comments]);
    }
    public function edit($id)
    {
        $post = Post::find($id);
        return Response::json($post);
    }
    public function update($id)
    {
        //
    }
    public function destroy($id)
    {
        Post::destroy($id);
        return Response::json(array('success' => true));
    }
}

路线:

Route::get('/', 'WelcomeController@index');
Route::get('home', 'HomeController@index');
Route::group(array('prefix' => 'api'), function() {
    Route::resource('posts', 'PostController',
    array('except' => array('index', 'store', 'destroy'))));
});
Route::controllers([
    'auth' => 'Auth'AuthController',
    'password' => 'Auth'PasswordController',
]);

我正在尝试使用上述路由来存储和删除记录。我可以查看它们,但不能存储或删除任何内容。对于api/posts/1/destroy (GET),我得到:

TokenMismatchException in VerifyCsrfToken.php line 46:
in VerifyCsrfToken.php line 46
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 115
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53
at require_once('/Library/WebServer/Documents/virtualine/virtualine/public/index.php') in server.php line 21

和api/posts/store我得到:

ErrorException in PostController.php line 69:
Trying to get property of non-object
in PostController.php line 69
at HandleExceptions->handleError('8', 'Trying to get property of non-object', '/Library/WebServer/Documents/virtualine/virtualine/app/Http/Controllers/PostController.php', '69', array('id' => 'store', 'post' => null, 'comments' => object(Collection))) in PostController.php line 69
at PostController->show('store')
at call_user_func_array(array(object(PostController), 'show'), array('posts' => 'store')) in Controller.php line 246
at Controller->callAction('show', array('posts' => 'store')) in ControllerDispatcher.php line 162
at ControllerDispatcher->call(object(PostController), object(Route), 'show') in ControllerDispatcher.php line 107
at ControllerDispatcher->Illuminate'Routing'{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate'Pipeline'{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 108
at ControllerDispatcher->callWithinStack(object(PostController), object(Route), object(Request), 'show') in ControllerDispatcher.php line 67
at ControllerDispatcher->dispatch(object(Route), object(Request), 'virtualine'Http'Controllers'PostController', 'show') in Route.php line 204
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 134
at Route->run(object(Request)) in Router.php line 701
at Router->Illuminate'Routing'{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate'Pipeline'{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Router.php line 703
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 670
at Router->dispatchToRoute(object(Request)) in Router.php line 628
at Router->dispatch(object(Request)) in Kernel.php line 214
at Kernel->Illuminate'Foundation'Http'{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in VerifyCsrfToken.php line 43
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate'Pipeline'{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 115
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53
at require_once('/Library/WebServer/Documents/virtualine/virtualine/public/index.php') in server.php line 21

您必须发送csrf令牌与表单数据,例如,如果您有一个名为add_question.blade.php的刀片文件包含以下表单:

 <form action="{{action('PostController@index')}}" method="post" ><input type="text" name="question" ><input type="submit"></form>

只需添加以下字段:

<input type="hidden" name="_token" value="{{ csrf_token() }}" />

所以它应该看起来像:

     <form  action="{{action('PostController@index')}}" method="post" ><input type="hidden" name="_token" value="{{ csrf_token() }}" /><input type="text" name="question" ><input type="submit"></form>