此路由不支持 GET 方法。支持的方法:PUT。与放置形式。拉拉维尔

Posted

技术标签:

【中文标题】此路由不支持 GET 方法。支持的方法:PUT。与放置形式。拉拉维尔【英文标题】:The GET method is not supported for this route. Supported methods: PUT. with put forms. Laravel 【发布时间】:2020-06-13 06:31:45 【问题描述】:

我实际上对我的一个表单有疑问,它允许用户更改他的个人资料图片。

当我提交文件时,这个 URI 正在加载 localhost/projetT/public/profil/icone/2 但什么也没发生。如果我重新加载 URI,因为加载时间非常长,我会收到以下错误: 此路由不支持 GET 方法。支持的方法:PUT。我需要帮助。

<div class="container bg-primary rounded mt-4 mb-4" style="min-height: 1300px;"">
  <div class="row p-2">
    <div class="col-12">
      <div class="row h-50">
        <div class="col-12 justify-content-center">
          <img class="img-fluid d-block bg-dark rounded-circle h-100 mx-auto shadow-lg" src="../public/uploads/ Auth::user()->image ">
        </div>
      </div>
      <div class="row" >
        <div class="container-fluid">
          <div class="card-body">
            <form action=" route('profil.icone',['user' => Auth::user()]) " method="POST"  enctype="multipart/form-data" >
            @csrf
            @method('PUT')
              <div class="row mx-md-n5">
                <div class="col">
                  <input id="avatar" type="file" class="form-control bg-white text-dark border-dark" name="avatar">
                </div>
              </div>
              <div class="row p-3">
                <div class="col text-center">
                  <button type="submit" class="btn btn-default btn-dark text-white" id="enregistre" name="enregistre">Changer de photo</button>
                </div>
              </div>
            </form>
          </div>
        </div>
      </div>
      <hr class="bg-dark"></hr>

      <div class="row">
        <div class="card-body">
          <form action=" route('profil.edit',['user' => Auth::user()]) " method="POST" enctype="multipart/form-data">
            @csrf
            @method('PUT')
            <h3 class="text-light mb-4 rounded bg-dark text-center">Informations du compte</h3>
            <div class="pl-lg-6">
              <div class="row">
                <div class="col-lg-6">
                  <div class="form-group focused">
                    <label class="text-dark" for="input-nom" class="text-primary">Nom</label>
                    <input type="text" id="input-nom" class="form-control validate border-dark font-weight-bold text-dark" name="nom" value=" Auth::user()->name " disabled="disabled" >
                  </div>
                </div>
                <div class="col-lg-6">
                  <div class="form-group focused">
                    <label class="text-dark" for="input-prenom">Prenom</label>
                    <input type="text" id="input-prenom" class="form-control validate border-dark font-weight-bold text-dark" name="prenom" value=" Auth::user()->prenom " disabled="disabled" >
                  </div>
                </div>
                <div class="col-lg-6">
                  <div class="form-group focused">
                    <label class="text-dark" for="input-pseudo">Pseudo</label>
                    <input type="tel" id="input-pseudo" class="form-control validate border-dark font-weight-bold text-dark" name="pseudo" value=" Auth::user()->pseudo " disabled="disabled">
                  </div>
                </div>
                <div class="col-lg-6">
                  <div class="form-group">
                    <label class="text-dark" for="input-email">Adresse Email</label>
                    <input type="email" id="input-email" class="form-control validate border-dark font-weight-bold text-dark" name="mail" value=" Auth::user()->email " disabled="disabled">
                  </div>
                </div>
                <div class="col-lg-6">
                  <div class="form-group" id="zoneOldMDP">
                    <!-- zone qui va recevoir les champs pour l'ancien mdp -->
                  </div>
                </div>
                <div class="col-lg-6">
                  <div class="form-group" id="zoneNewMDP">
                    <!-- zone qui va recevoir les champs pour le nouveau mdp -->  
                  </div>
                </div>
                <div class="col text-center" id="zoneEnregistrer">
                  <input class="btn btn-default btn-dark text-white" type="button" id="modifier" name="modifier" value="Modifier">
                </div>
              </div>  
            </div> 
          </form>
        </div>
      </div>  
    </div>
  </div>
</div> 

所以,我的问题是关于 route('profil.icone',['user' => Auth::user()]) 的第一个表单。

route('profil.edit',['user' => Auth::user()]) 的第二种形式实际上运行良好并更新了我在数据库中的数据。第二种形式的提交按钮是在点击“修改器”按钮后在JQuery中添加的。

但我不明白为什么第一个不起作用,因为这两种形式非常相似,只是动作名称在变化。

class ProfilController extends Controller

    public function index()
    
        return view('profil');
    

     public function store(ImagesRequest $request, User $user)
    
        $request->validate([
            'avatar' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048'
        ]);

        if($request->hasFile('avatar'))
            $image = $request->file('avatar');

            $filename = time() . '.' . $image->getClientOriginalExtension();
            Image::make($image)->resize(300, 300)->save('/uploads/' . $filename );

            $user->image = $filename;
            $user->save();
        
        return view('profil')->with ('alert', 'Votre photo a été mise à jour');
    

    public function storeCompte(Request $request, User $user)
    
        $nom = $request->nom;
        $prenom = $request->prenom;
        $pseudo = $request->pseudo;
        $mail = $request->mail;

        $user->name = $nom;
        $user->prenom = $prenom;
        $user->pseudo = $pseudo;
        $user->email = $mail;   

        $user->save();

        return back ()->with ('alert', 'Vos informations ont été mise à jour');
    

有关于个人资料的路线;在 web.php 文件中。

Route::get('/profil', 'ProfilController@index')->name('profil')->middleware('auth');
//route pour mettre a jour sa photo de profil
Route::put('/profil/icone/user', 'ProfilController@store')->name('profil.icone');
//route pour editer son profil
Route::put('/profil/edituser', 'ProfilController@storeCompte')->name('profil.edit');

感谢您的帮助。

【问题讨论】:

Route::put('/profil/edituser 上添加一个斜杠(/)到Route::put('/profil/edit/user 【参考方案1】:

所以,我重新启动了 MAMP,因此 apache 服务器和路由正常工作,我现在有一个“无法将数据写入路径”但我猜可以解决它。 谢谢帮忙。

【讨论】:

【参考方案2】:

您有错别字需要修正才能正常工作

改变这一行

Route::put('/profil/edituser', 'ProfilController@storeCompte')->name('profil.edit');

Route::put('/profil/edit/user', 'ProfilController@storeCompte')->name('profil.edit');

然后在你的刀片形式中

改变

action=" route('profil.icone',['user' => Auth::user()]) "
action=" route('profil.edit',['user' => Auth::user()]) "

action=" route('profil.icone',['user' => Auth::id()]) "
action=" route('profil.edit',['user' => Auth::id()]) "

【讨论】:

谢谢,我已经编辑了动作,但仍然无法为图标工作。点击按钮更换照片后,仍然有一个无法完成的加载。 您可以使用dd('message'); 逐行调试您的store 函数,以确保您的请求到达正确的位置 是的,但是我不能,因为即使存储功能为空,我也遇到了同样的问题,当我点击更改按钮时,无法完成加载,如果我重新加载 URI,则获取方法不支持。可能错误来自其他方式,不知道,这是我第一个使用 Laravel 的项目。 是的,您不应该从浏览器搜索栏中手动重新加载 URI,因为浏览器只能通过表单提交发送 POST、PUT、PATCH、DELETE 请求。但是,您必须等待它收到错误消息。 30 分钟,什么也没发生……我不知道。无法加载 URI 可能是有原因的。

以上是关于此路由不支持 GET 方法。支持的方法:PUT。与放置形式。拉拉维尔的主要内容,如果未能解决你的问题,请参考以下文章

此路由不支持 PUT 方法。支持的方法:GET、HEAD、POST。在 laravel 中

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException 此路由不支持 GET 方法。支持的方法:PUT

此路由不支持 PUT 方法。 Vue/laravel

Laravel 6.0 不支持 DELETE、PUT 方法

此路由不支持 GET 方法。支持的方法:POST。在插入/存储

此路由 Laravel + ConfirmBox 不支持 GET 方法