【问题标题】:Laravel 6.8 PUT Method not working, Showing Blank PageLaravel 6.8 PUT 方法不起作用,显示空白页
【发布时间】:2020-04-15 13:26:05
【问题描述】:

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 工匠路线:列表 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');

【问题讨论】:

    标签: php laravel routes


    【解决方案1】:

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

    • 您已经按照此处的专家建议测试了 PUT 和 PATCH 变体。
    • 你可以得到指向路由文件(web.php)的指针,但不能指向控制器的Any函数>>>这意味着指针没有传递给控制器​​。

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

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

    • 从其他地方调用控制器文件

    问题

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

    如果答案是 YES,那么可能是从 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;
    }
    

    如果此过程对您有帮助,请告诉我。祝你好运。

    【讨论】:

    • 谢谢@Viral 我尝试了这里给出的所有可能的建议。是的,你是对的。我那里有备份文件。我删除了它们,它开始显示找不到控制器的错误。这证实了错误的控制器正在调用。我删除了它们,[ composer dumpautoload ] 命令对我有用。非常感谢。
    • php artisan route:cache 是诀窍!在某些 Laravel 应用程序中,我需要在每次更改时清除路由缓存,
    【解决方案2】:

    你能不能先试试下面的工匠命令: php artisan cache:clear 确保缓存不是这里的问题。

    你也可以试着把 dd('test'); 在你的更新函数的第一行,确保没有结果显示?

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

    你展示的所有代码在我看来都不错

    【讨论】:

      【解决方案3】:

      把你的动作改成这个

      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) ]) }}"
      

      &lt;input type="hidden" name="_method" value="PATCH"&gt;代替PUT

      【讨论】:

      • 感谢 Prashant 的建议。生成的错误 --> prntscr.com/qf6ln6 所以尝试了这个解决方案 --> prntscr.com/qf6mwl 并解决了错误。但是再次提交..指针不会在控制器中更新
      • 感谢@Prashant,但会产生错误 -> prntscr.com/qf6wg6 即使我使用静态记录 ID,它也会进入空白页面
      • 这并没有像以前那样给出任何错误,但在提交时再次进入空白页面。我认为 edit.php 页面很好,因为我们可以使用 put 在 web.php 路由器页面中获取指针。但它不会去控制器更新方法。这看起来是重点领域。感谢 Prashant 的所有建议。
      • @VipulGhetiya 将 PUT 更改为 PATCH
      • 那个建议给了我这样的错误 -> prnt.sc/qf7a08
      【解决方案4】:

      控制器

      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>
      

      【讨论】:

      • 谢谢 Vikas 但这并没有帮助。这将返回到相同的空白页面。我在该控制器中测试了所有功能,并且指针不会指向任何功能。但是,如果我更改为 web.php 并尝试捕获 PUT 操作,那么我可以将指针指向路由文件
      • &lt;form action="{{ route('certificate.update',$certificate_data-&gt;id) }}" method="post"&gt;"
      【解决方案5】:

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

      public function update(Request $request, $certificate)
      

      【讨论】:

      • 感谢您的建议,但没有奏效。我已经这样测试过了。 IE。 prntscr.com/qf6fft
      猜你喜欢
      • 2020-03-27
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2017-07-16
      相关资源
      最近更新 更多