使用csrf_token Laravel 5.4发送post表单时的MethodNotAllowedException

时间:2018-03-18 04:52:47

标签: php forms validation post laravel-5.4

我正在尝试从我的路由资源访问我的“商店”(POST)方法。我从一个可以具有不同输入的表单调用ProductCRUD.store方法,具体取决于前一页。我的意思是,根据我收到的对象是否具有某个布尔值,显示输入。

@if($category->havePrice == 1)
  {!! Form::label('price', 'Price') !!}
  {!! Form::text('price', '', array('id' => 'price', 'name' => "price") !!}
@endif

当我点击按钮发送表格时,我收到一条消息说     RouteCollection.php第251行中的MethodNotAllowedHttpException:...

我也尝试使用方法csrf_field()添加csrf标记。 我尝试用这两种方法清空laravel的缓存:

php artisan cache:clear
php artisan route:cache

我尝试创建这样的个人路线:

Route::post('/product/store',  array('as' => 'product', 'uses' => 'ProductController@store'));

这些解决方案都不起作用。总是那个例外。

我目前的代码:

路线:

Route::resource('ProductCRUD','ProductController');

表格

<form method="POST" action="{{route('ProductCRUD.store')}}">
    {{ csrf_field() }}

控制器方法:

public function store(Request $request) {
    $newGameModel= new GameModel();
    $category = $this->CategoryRepo->getByID($request->category);

    $this->validate($request, [
        'name'=> 'required',
        'picture'=> 'required|image|mimes:jpg,jpeg,gif,png|max:5000',
        'quantite' => 'required|min:0',
        'price' => 'required_if:'.$category->havePrice.',1',
    ]);
    ...
}

如果我删除“$ this-&gt; validate(...)”方法,代码将继续执行(不再出现MethodNotAllowedException错误)。我试图逐一评论它没有任何改变。

另外,如果我重新加载页面,输入错误会正确显示。如果我再次点击发送表格,惊喜!再次出错。

编辑: 我只使用一个按钮和表单发送我的表单,没有ajax:

{!! Form::submit('Next step', 'name'=>"accept", 'methode' => "post")) !!}

另外,我可以访问我的控制器代码。如果我删除了验证方法,那么一切都可以找到

你们有什么想法为什么这样做?谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

好的,所以我发现了问题以及如何修复它(不是我想要做的)。 首先,我的代码中没有任何错误。我的帖子,csrf和我的路线都很好。

问题在于larval如何验证事物。例如,如果您的第一个页面是一个帖子表单而您的第二个页面也是一个帖子表单,当您在第二个页面上验证并且它失败时,它将尝试返回到第二个页面以显示错误。但事实是,它找不到你的第一页的响应,所以你得到的错误就像我得到的那样。

我通过删除第一个表单来修复它(对我来说,这是我可以放在其他地方的一些信息)。但我不知道是否有更好的方法来解决它。