我是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
非常感谢任何帮助。
答案 0 :(得分:2)
您必须使用表单数据发送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>