【问题标题】:Undefined Route未定义路线
【发布时间】:2021-05-16 09:26:13
【问题描述】:

我对 laravel 很陌生,我对路由真的很糟糕。我想删除特定数据,但它说路由未定义

CandidateController.php 这是我的删除方法

public function destroy(Form $candidates)
{
    $candidates->delete();

    return redirect()->route('candidate.approve');
}

路线

Route::resource('candidates', CandidateController::class);

我正在使用资源,当我阅读本教程时,它会将我的代码缩短为上面的代码。当我单击删除按钮时,它显示未定义路线 [candidate.approve]。有人可以帮我解决我哪里出错了吗?

刀片

 @foreach ($candidates as $candidate)
                            <div class="modal__content">
                                <div class="p-5 text-center"> <i data-feather="x-circle" class="w-16 h-16 text-theme-6 mx-auto mt-3"></i>
                                    <form action="{{ route('candidates.destroy', $candidate->id) }}" method="POST">
                                        @csrf
                                        @method('DELETE')
                                        <div class="text-3xl mt-5">Are you sure?</div>
                                        <div class="text-gray-600 mt-2">Do you really want to delete these records? This process cannot be undone.</div>

                                        <button type="button" data-dismiss="modal" class="button w-24 border text-gray-700 dark:border-dark-5 dark:text-gray-300 mr-1">Cancel</button> 
                                        <button type="submit" title="delete" class="button w-24 bg-theme-6 text-white" >Delete</button> 
                                </div>
                                <div class="px-5 pb-8 text-center"> 
                            </div>
                        </div>
                    </form>
                        </div>
                        @endforeach

web.php

Route::get('application/approve/{id}', 'CandidateController@postApprove')->name('application');
Route::get('candidate', [CandidateController::class, 'approve'])->name('candidate.approve');
Route::resource('candidates', CandidateController::class);

【问题讨论】:

  • 这很可能是因为您的 web.php 文件中没有定义candidate.approve 的实际路由。当您指定路由名称时。用php artisan route:list检查你的路线,你会得到所有的路线
  • 你的销毁路线是candidates.destroy Documentation
  • @Tithira 我按照文档进行操作,但它说 Missing required parameters for [Route: Candidates.destroy] [URI: Candidates/{candidate}]
  • 是的,您需要传递路由的参数,即primary key 或您的模型。默认情况下,id 是主键。 Destroy 方法接受控制器函数中的主键并返回一个实例,因此在您的操作触发器Passing parameters for routes 中传递路由参数{{ route('candidates.destroy', ['candidate' =&gt; $candidate-&gt;id]) }}
  • 实际上我已将 id 放入我的操作触发器中但仍然无法正常工作

标签: php laravel


【解决方案1】:

只需在 Route::resource 之前添加具有 candidate.approve 名称的新 Route。

你的 web.php 文件会是这样的

Route::get('your-url', [CandidateController::class, 'approve')->name('candidate.approve');
Route::resource('candidates', CandidateController::class);

但最好将 prural 用于命名路由,例如资源控制器:

  1. candidates.create
  2. candidates.store
  3. ...

更新

既然我知道应用程序的流程,你应该在控制器上使用它:

return back();

为什么?因为当管理员在模式上单击删除时,它将转到另一个 URL 以从数据库中删除数据。删除后,return back() 会将管理员重定向到之前的 URL

【讨论】:

  • 我试过了,但路线仍然未定义 :((
  • 向我们展示您的 web.php 内容。还要检查你的刀片(idk 标签与 href=route('candidate.approve')
  • 我更新了我的问题,其中包括刀片和 web.php
  • 用户删除候选人后的流程是什么?也许它可以帮助我改进我的答案
  • 它将返回到同一个刀片。假设我的刀片正在显示一个候选列表,然后管理员单击候选 A“删除”按钮,它将出现一个弹出确认,然后在管理员单击删除后,它将重定向到同一个刀片,但候选 A 不再存在
猜你喜欢
  • 1970-01-01
  • 2019-11-30
  • 2016-08-26
  • 2021-11-12
  • 2022-01-16
  • 2018-10-15
  • 2020-09-13
  • 2017-12-25
  • 2023-03-29
相关资源
最近更新 更多