【问题标题】:Wrong Method for Laravel Route, change the method in formLaravel Route 的 Method 错误,在 form 中更改方法
【发布时间】:2021-03-25 17:52:21
【问题描述】:

我对 Laravel 8 和 AdminLTE 有疑问。基本上,我安装了 Admin LTE 和一个对象 Editos。我在这个菜单中有两个按钮:添加编辑和编辑。两者都重定向到相同的表单,但使用不同的 Laravel 路由。所以我的 form.blade.php 以 :

开头
<form 
        method="post" 
        action="{{ Route::currentRouteName() === 'editos.edit' ? route('editos.update', $edito->id) : route('editos.store') }}">

        @if(Route::currentRouteName() === 'editos.edit')
            @method('PUT')
        @endif
        
        @csrf

两个按钮都重定向到正确的路线。 ADD 功能完美运行:我填写表单并按下提交按钮,调用带有 POST 方法的 'editos.store 函数,并且编辑存储在我的数据库中。 但是当我点击 EDIT 时,它与编辑路线一起(ok),它加载实际字段(ok),但我点击提交,它调用'editos.update'路线(ok)但我得到了这个 Laravel 错误留言:

此路由不支持 GET 方法。支持的方法:PUT。 http://hibooexpert.home/admin/editos/update/11?_method=PUT&_token=wGibILt5dHCfIOWDMNIuiTYXNL4quDagNJAob4t2&body=%3Cp%3EJe%20suis%26nbsp%3B%20un%20texte%20exempleqsfdqdfsqf%3C%2Fp%3E%0D%0A&categories%5B0%5D=2&excerpt=sqdfsqdf&image=image00004.jpeg&meta_description=General&meta_keywords=keyyy&seo_title=Bonjour&slug=bonjourfsdf&tags=&title=Bonjour

我的路由在我的 web.php 中是这样定义的:

Route::prefix('admin')->group(function () {
    Route::middleware('admin')->group(function () {
        Route::put('editos/update/{id}', [BackEditoController::class, 'update'])->name('editos.update');
        Route::name('admin')->get('/', [AdminController::class, 'index']);
        Route::name('purge')->put('purge/{model}', [AdminController::class, 'purge']);
        Route::name('editos.create')->get('edito/create', [BackEditoController::class, 'create']);
        Route::name('editos.store')->post('editos/store', [BackEditoController::class, 'store']);
        Route::name('editos.edit')->get('editos/edit/{id}', [BackEditoController::class, 'edit']);
        Route::name('editos.destroy')->post('editos/destroy', [BackEditoController::class, 'destroy']);

        Route::name('editos')->get('editos', [BackEditoController::class, 'index']);
    });
    
});

(我只是把editos/update/放在最上面试试,也改变了语法,但把它放在别的地方不起作用)。 如你所见,它是一个 PUT 函数,在我做 route:list 时它也被定义为一个 PUT 函数。我已经尝试过 dump-autoload 和 cache clear composer 命令。

Controller中的更新函数是:

  public function update(EditoRequest $request, EditoRepository $repository, Edito $edito, $id = null)
    {   
        $edito = null; 
        if($id) {
            $edito = Edito::findOrFail($id);
        }
        $repository->update($edito, $request);
        return back()->with('ok', __('The edito has been successfully updated'));
    }

而存储库功能是:

public function update($edito, $request)
    {
        $request->merge([
            'active' => $request->has('active'),
            'image' => basename($request->image),
        ]);
        $edito->update($request->all());
        $this->saveCategoriesAndTags($edito, $request);
    }

我完全被卡住了,如果有人看到解决方案,那就太棒了!

【问题讨论】:

    标签: php laravel adminlte


    【解决方案1】:

    根据我之前的经验,有时http:// 会导致此问题,请尝试使用https://,看看问题是否已解决

    【讨论】:

      猜你喜欢
      • 2020-05-19
      • 2020-11-27
      • 2019-05-09
      • 2019-03-13
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2018-10-06
      • 2021-12-30
      相关资源
      最近更新 更多