验证更新Laravel

时间:2018-07-18 02:32:21

标签: php laravel web

早安,

我真的是laravel的新手,并乐于使用它,直到遇到一个确实让我痛苦的编程问题为止,这是更新方法期间的验证重定向。这给我一个错误

Symfony \组件\ HttpKernel \ Exception \ MethodNotAllowedHttpException 没有消息

程序是关于拒绝购买请求的,我希望拒绝原因写一个便条,该字段不能为空,我可以验证它,但是我的问题是重定向期间的错误。

这是deny.blade.php的表格

{!!Form::open(['action'=>['prInitialApprovalController@update',$post->id],',method'=>'POST', 'class'=>'pull-right'])!!}
    <div class="form-group">
    {{Form::label('denyNote','Deny Note(Please fill this up for it is required)')}}
    {{Form::textarea('denyNote','', [ 'id'=>'article-ckeditor','class'=>'form-control','placeholder'=>'Please fill deny note for it is required'])}}
    </div>    
    {{Form::hidden('denied','11', ['class'=>'form-control'])}}
    {{Form::hidden('_method','PUT')}}
    {{Form::submit('Deny', ['class'=>'btn btn-primary'])}}
    <a href="/pr_approval" class="btn btn-dark">Return</a>
{!!Form::close()!!}

这是控制器上的更新方法

public function update(Request $request, $id)
{
    //update category
    $post = prModel::find($id);

    if($request->input('denied') == '11'){
    $validator = Validator::make($request->all(), [

    'denyNote' => 'required',
    ]);

    if ($validator->fails()) {
        return redirect()->action(
            'prInitialApprovalController@deny', $id
        )->withErrors($validator);
     }else{
        $post->pr_status = '11';
        $post->deny_reason = $request->input('denyNote');
        $post->save();
        return redirect('/pr_approval')->with('success', 'Purchase Request Denied');
    }
    }
}

这是我的网络路线

Route::put('pr_approval/{id}/deny', 'prInitialApprovalController@deny');
Route:: Resource('/pr_approval', 'prInitialApprovalController');
Auth::routes();

这是路线列表

Route Image

请帮忙,我确实在类似的日子里一直坚持下去。我正在使用laravel 5.6

谢谢

3 个答案:

答案 0 :(得分:0)

尝试将表格与模型绑定一起使用:

{{ Form::model($post, ['route' => ['pr_approval.update', $post->id]]) }}
 // Your Html
{{Form::close}}

此外,删除此行。

{{Form::hidden('_method','PUT')}}

祝你好运!

答案 1 :(得分:0)

尝试使用其中任何一种。

{!!Form::open(['action'=>['prInitialApprovalController@update',$post->id],',method'=>'PUT', 'class'=>'pull-right'])!!}

OR

在您的表单中添加此字段:

<input name="_method" type="hidden" value="PUT">

OR

您也可以这样:

{!!Form::open(['action'=>['prInitialApprovalController@update',$post->id],',method'=>'POST', 'class'=>'pull-right'])!!}
{{ method_field('PUT') }}

删除此行:

{{Form::hidden('_method','PUT')}}

答案 2 :(得分:0)

您的csrf令牌实际上有问题。

提交任何表单时,您都需要 @csrf 令牌。 laravel 5.6
对使用表单进行数据托管有一些要求。

         @foreach ($errors->all() as $error)
         <div class="alert alert-danger " style="text-align:center;">
          <a href="#" class="close" data-dismiss="alert">&times;</a>
            <strong>Error!</strong>     {{ $error }}
         </div>

         @endforeach //for error

{!!Form::open(['action'=>['prInitialApprovalController@update',$post->id],',method'=>'POST', 'class'=>'pull-right'])!!}
    @csrf
                   <div class="form-group">
                            {{Form::label('denyNote','Deny Note(Please fill this up for it is required)')}}
                            {{Form::textarea('denyNote','', [ 'id'=>'article-ckeditor','class'=>'form-control','placeholder'=>'Please fill deny note for it is required'])}}
                        </div>    
                    {{Form::hidden('denied','11', ['class'=>'form-control'])}}
                    {{Form::hidden('_method','PUT')}}
                    {{Form::submit('Deny', ['class'=>'btn btn-primary'])}}
                    <input type="submit value="Return" href="/pr_approval" class="btn btn-dark">
                    {!!Form::close()!!}

在@csrf令牌之后,某些情况下,我们还需要您的令牌值/

<div style="display:none"><input type="hidden" value="af22b8f3a43fe074cfa5daf43f6250eba767f1bc" name="YII_CSRF_TOKEN" /></div>

也可以使用

 <form action="{{ URL::to('/Registration_store') }} method="POST" >

和   web.php路由是

Route::post('/Registration_store','controller_name@function_name');


 您不需要此代码laravel自动抛出错误预览页面。

 if ($validator->fails()) {
        return redirect()->action(
            'prInitialApprovalController@deny', $id
        )->withErrors($validator);
     }