【问题标题】:Route not defined exception in Laravel but Route is definedLaravel 中路由未定义异常但路由已定义
【发布时间】:2020-08-16 20:42:50
【问题描述】:

我正在尝试通过按下按钮来调用路线,但它给了我 路线 [makeAdmin] 未定义。 (查看:\resources\views\admin\showUser.blade.php)即使定义了路由。

我的刀片视图:

 <div style="padding-bottom:10px;">
    @if($user->isAdmin == 0)
      <form action="{{route('makeAdmin', $user->id)}}" method="POST">
        @csrf
        @method('PUT')
         <div class="form-group">
      <button class="btn btn-warning" type="submit">Make Admin</button>
         </div> 
     </form>
    @else
      <button class="btn btn-warning" disabled="disabled">Already Admin</button>
    @endif
  </div>

我的路线:

Route::GET('/', 'CoursesController@root')->name('root');
Route::GET('/courses/create', 'CoursesController@create')->name('courses.create');
Route::POST('/courses', 'CoursesController@store')->name('courses.store');
Route::GET('/courses', 'CoursesController@index')->name('courses.courses');
Route::GET('/courses/{id}', 'CoursesController@show')->name('courses.show');
Route::GET('/admin/courses', 'AdminController@getCourses')->name('admin.courses');
Route::GET('/admin/users', 'AdminController@getUsers')->name('admin.users');
Route::GET('/admin', 'AdminController@index')->name('admin');
Route::GET('/admin/courses/{id}', 'AdminController@showCourse')->name('admin.showCourse');
Route::PUT('/admin/courses/{course}', 'AdminController@editCourse')->name('admin.editCourse');
Route::DELETE('/admin/courses/{course}', 'AdminController@destroyCourse')->name('admin.destroyCourse');
Route::GET('/admin/users/{id}', 'AdminController@showUser')->name('admin.showUser');
Route::PUT('/admin/users/{user}', 'AdminController@makeAdmin')->name('makeAdmin');
Route::PUT('/admin/users/{user}', 'AdminController@editUser')->name('admin.editUser');
Route::DELETE('admin/users/{user}', 'AdminController@destroyUser')->name('admin.destroyUser');



Auth::routes();
Route::GET('/home', 'HomeController@index')->name('home');

我试过 route:clear 和 route:cache 但问题仍然出现。并且路线没有出现在 route:list 我们将不胜感激。

【问题讨论】:

  • 那条路线有两次:Route::PUT('/admin/users/{user}'...
  • 谢谢!这就是问题所在,我删除了重复的路线并将管理功能添加到编辑用户表单中。再次感谢您。
  • 没问题,很高兴它有效

标签: php laravel laravel-blade


【解决方案1】:

问题似乎是我在 web.php 中有一条重复的路由

Route::PUT('/admin/users/{user}', 'AdminController@makeAdmin')->name('makeAdmin');
Route::PUT('/admin/users/{user}', 'AdminController@editUser')->name('admin.editUser');

显然,这不是 Laravel 中的工作方式,因此我删除了 makeAdmin 路由并将该功能添加为我在刀片视图中的 editUser 表单的一部分。所以 web.php 只会有这个:

Route::PUT('/admin/users/{user}', 'AdminController@editUser')->name('admin.editUser');

感谢大家的参与。特别感谢 kerbholz。

【讨论】:

    【解决方案2】:

    这样使用

    <form action="{{route('makeAdmin',['user'=>$user->id])}}" method="POST">
    

    【讨论】:

    • 我已经尝试过您的解决方案,但仍然出现相同的异常。
    • @RedJohn 我更新了我的答案。它对我很有效
    • 将值与数组元素相关联是个好主意,但对我仍然不起作用。不过,非常感谢。
    【解决方案3】:

    如果我理解正确,您的route.php 中的每个/admin 路由都以admin. 为前缀命名

    所以也许尝试将路由命名为 admin.makeAdmin 并在您的视图中调用它,如下所示:

    <form action="{{route('admin.makeAdmin', $user->id)}}" method="POST">
    

    看看它是否有效。

    【讨论】:

    • 是的,那是我刚刚尝试编辑名称以便它可以工作的原始代码。但是,它仍然不起作用。
    【解决方案4】:

    在 makeAdmin 的路由中,只需指定 POST 而不是 PUT。因为在 HTML 表单中你已经提到了那个方法

    【讨论】:

    • 如果你使用put in route,你必须使用put in form。如果问题被提出或发布,laravel 得到错误,方法不允许
    • 不是一个很好的解决方案,因为我可以指定我使用 put 的内部刀片形式。
    猜你喜欢
    • 1970-01-01
    • 2017-05-02
    • 2019-02-15
    • 2018-06-30
    • 2018-12-16
    • 2016-02-06
    • 2021-11-24
    • 2020-02-06
    相关资源
    最近更新 更多