Laravel 6.8 PUT 方法不起作用,显示空白页

Vir*_*ral 5 php routes laravel

Laravel 6.8 PUT 方法不适用于其中一个控制器,显示空白页

任何建议或解决方案都是最受欢迎的。以下是代码摘要。路由指针不在控制器更新功能下

HTML edit.blad.php (我用 {{ method_field('PUT') }} 测试)

<form class="form-horizontal" action="{{ route('certificate.update',$certificate_data->id) }}" method="post">
    {{ csrf_field() }}
    <input type="hidden" name="_method" value="PUT">

    // Other Form Fields 

</form>
Run Code Online (Sandbox Code Playgroud)

web.php(路由文件)

Route::group(['prefix' => 'admin'], function(){
    Route::resource('certificate', 'CertificateController');
});
Run Code Online (Sandbox Code Playgroud)

php 工匠路线:列表 http://prntscr.com/qf662i

这是 route:list 的输出

控制器功能

public function update(Request $request, Certificate $certificate)
{
        echo 'vvvvv'; 
        return $certificate;
        return $input = $request->all();

}
Run Code Online (Sandbox Code Playgroud)

指针未进入控制器更新并仅显示空白页 我还测试了控制器的所有功能

供参考 -> 如果我更改 web.php 并执行以下代码,则指针会出现在那里。但不能进入Controller 更新功能。

Route::put('certificate/{certificate}', function ($certificate) {
        return $certificate;
})->name('certificate_update');
Run Code Online (Sandbox Code Playgroud)

Vir*_*ral 3

根据您的代码,一切看起来都很好。

  • 您已经根据此处的专家建议测试了 PUT 和 PATCH 变体。
  • 您可以将指针获取到路由文件(web.php),但不能获取到控制器的任何函数>>>这意味着指针没有传递到控制器。

指针未从路由文件进入控制器的原因

  • 您的控制器路径或名称错误/不匹配

  • 从另一个地方调用控制器文件

问题

  • 任何备份文件夹或备份控制器文件存储在那里?[ \app\Http\Controllers\ ]

如果答案为“是”,则可能会从 Laravel 缓存调用备份中的错误控制器。从控制器文件夹中删除这些备份文件和文件夹。

解决方案

我认为控制器 PATH 已缓存,并且调用了错误的控制器。尝试以下命令来清除常规缓存。

php artisan cache:clear
php artisan route:cache
php artisan config:cache
php artisan view:clear
Run Code Online (Sandbox Code Playgroud)

清除控制器文件/路径缓存。我们必须重新生成自动加载。

尝试执行以下命令。(这一步很重要

composer dumpautoload
Run Code Online (Sandbox Code Playgroud)

如果这解决了您的问题,那么您可以使用正常的 html edit.blade 表单语法,如下所示。

<form action="{{ route('certificate.update',$certificate_data->id) }}" method="post">
       {{ csrf_field() }}
       {{ method_field('PUT') }}

       // Other form fields

</form> 
Run Code Online (Sandbox Code Playgroud)

在你的控制器上。你的正常代码应该像下面这样工作。

public function update(Request $request, Certificate $certificate)
{
    return $certificate;
}
Run Code Online (Sandbox Code Playgroud)

让我知道这个过程是否对您有帮助。祝你好运。