【问题标题】:laravel 5.5.44 post router throws 302 Found Errorlaravel 5.5.44 后路由器抛出 302 Found Error
【发布时间】:2019-03-27 16:48:22
【问题描述】:

尝试在路由中使用 post 方法更新时遇到 302 Found 错误。

路线

Route::post('update_article/{id}', 'ArticleController@update_article')->name('articles.update');

编辑表单刀片

{!! Form::model($article, ['route'=>['articles.update', $article->id], 'method' => 'post', 'class' => 'form-horizontal form-stripe']) !!}

控制器

public function update_article(Request $request, $id)
    {
        $data = Article::find($id);
        $url = $this->url->to('/');       
        $data->image = $request->input('image');
        $data->title = $request->input('title');
        $data->description = $request->input('description');
        $data->user_id = Auth::id();
        $data->status = $request->input('status');


       if ($request->hasFile('image')) 
       {
        $f_imageName = time().'.'.request()->image->getClientOriginalExtension();
        request()->image->move(public_path('uploads/articles'), $f_imageName);
        $data->image =$url.'/public/uploads/articles/'.$f_imageName; 
       }
       else
       {
        $data->image = $request->input('image_hidden');    
       }

    $data->save();   
    Session::flash('success', 'articles has been updated');
    return redirect()->route('articles.index');
    }

使用 POST 进行更新,而不是使用 Summernote 时的 PUT。当我使用PUT 时,大的description 会被截断。在summernote 中,它指出如果我不使用POST 方法可能会发生这种情况。

update_article 路由之前还有一条默认路由,用于文章资源:

Route::resource('articles', 'ArticleController');

注意:csrf token 在 post 操作中作为 _token 参数发送。还没有找到任何解决方案。我有什么遗漏吗?

【问题讨论】:

    标签: post laravel-5 routes http-status-code-302


    【解决方案1】:

    如果你已经创建了你提到的资源。

    Route::resource('articles', 'ArticleController');
    

    然后从您的路由web.php 中删除以下代码并运行代码。

    Route::post('update_article/{id}', 'ArticleController@update_article')->name('articles.update');
    

    【讨论】:

    • 在这种情况下,更新操作不允许post方法,它说HttpMethodException,在这种情况下只允许put或patch。正如我所提到的,我不能使用PUT,因为它截断了summernote 的描述字段,我需要使用POST。默认资源路由要求方法为put这里。
    • 有什么建议吗?
    • 你用ajax提交表单吗?如果是,请检查控制台中的表单数据。我认为描述字段为空。 laravel 不会截断。
    • 不,我使用的是普通表单提交,描述字段不为空,它有文本值。
    • 通过更改数据库结构解决了它并按照您的建议,谢谢
    【解决方案2】:

    最后,我将 DB 结构从 varchar 更改为类型 text,并且在更新操作中使用 PUT 方法而不是 POST 不会截断长描述。因此,在表单提交中使用方法PUT 回到默认路由-

    路线:

    Route::resource('articles', 'ArticleController');
    

    现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 2014-08-21
      • 2022-07-16
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      相关资源
      最近更新 更多