【问题标题】:Validation on update Laravel更新 Laravel 的验证
【发布时间】:2018-07-18 02:32:20
【问题描述】:

美好的一天,

我真的是 laravel 的新手,并且玩得很开心,直到我遇到一个真正让我在编程中痛苦的问题,它是更新方法期间的验证重定向。它给了我一个错误

Symfony\Component\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();

这是路线列表

请帮助我好几天都坚持这个问题。我正在使用 laravel 5.6

谢谢

【问题讨论】:

  • 试试这个让我知道 {{ Form::open(array('url' => '/', 'method' => 'PUT', 'class'=>'col-md -12')) }} .... 无论代码在这里 {{ Form::close() }} 您必须将方法从 post 更改为 put
  • 尝试使用路由或网址代替操作?
  • 试过了,还是一样的错误
  • @motifaithed 运行此命令并将输出发布到您的问题中。 php工匠路线:列表
  • 已经上传了路由列表图片

标签: php laravel web


【解决方案1】:

尝试使用带有模型绑定的表单:

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

另外,删除这一行。

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

祝你好运!

【讨论】:

    【解决方案2】:

    尝试使用其中任何一种。

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

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

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

    你也可以这样做:

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

    删除这一行:

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

    【讨论】:

      【解决方案3】:

      您的 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);
           }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-04
        • 1970-01-01
        • 2014-06-28
        • 2014-08-20
        • 1970-01-01
        • 2015-01-02
        • 2020-07-29
        • 1970-01-01
        相关资源
        最近更新 更多