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

时间:2019-12-24 12:56:10

标签: php laravel routes

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>

web.php(路由文件)

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

php artisan route:list http://prntscr.com/qf662i

this is output of route:list

控制器功能

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

}

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

供参考->如果我更改web.php并执行以下代码,则指针将到达那里。但不包含Controller更新功能。

Route::put('certificate/{certificate}', function ($certificate) {
        return $certificate;
})->name('certificate_update');

5 个答案:

答案 0 :(得分:2)

控制器

public function update(Request $request,$certificate)
{
return $input = $request->all();
}

刀片文件

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

    // Other Form Fields 

</form>

答案 1 :(得分:1)

根据您的代码,一切看起来都不错。

  • 您已经按照此处的专家建议测试了PUT和PATCH版本。
  • 您可以将指针获取到路由文件(web.php)中,但不能获取到控制器的Any函数中>>>这意味着指针未传递到控制器中。

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

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

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

问题

  • 存储在其中的任何BACKUP FOLDER或BACKUP CONTROLLER文件? [\ app \ Http \ Controllers \]

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

解决方案

我认为缓存了控制器PATH,而是调用了错误的控制器。 尝试使用以下命令清除常规缓存。

php artisan cache:clear
php artisan route:cache
php artisan config:cache
php artisan view:clear

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

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

composer dumpautoload

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

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

       // Other form fields

</form> 

在您的控制器上。您的普通代码应如下所示工作。

public function update(Request $request, Certificate $certificate)
{
    return $certificate;
}

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

答案 2 :(得分:0)

尝试像这样更改控制器中的功能:

public function update(Request $request, $certificate)

答案 3 :(得分:0)

将操作更改为此

action="{{ route('certificate.update',[$certificate_data->id,\App\Certificate::find($certificate_data->id) ]) }}"

action="{{ route('certificate.update',[$certificate_data->id,App\Certificate::find($certificate_data->id) ]) }}"

使用PUT代替<input type="hidden" name="_method" value="PATCH">

答案 4 :(得分:0)

您能否先尝试以下artisan命令: php artisan cache:clear以确保此处不是缓存问题。

您也可以尝试放 dd('test');在您的更新功能的第一行中,以确保未显示任何结果?

如果它不起作用,您可以告诉我您的模型吗?和控制器?

您显示的所有代码对我来说都很不错