Laravel中未定义路由异常,但已定义路由

时间:2020-05-02 10:45:13

标签: php laravel laravel-blade

我正在尝试通过按下按钮来呼叫路线,但这给了我 路由[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中 您的帮助将不胜感激。

4 个答案:

答案 0 :(得分:0)

如果我正确理解,则您/admin中的每条route.php路由似乎都以admin.开头

因此,也许尝试将路线命名为admin.makeAdmin,然后在您的视图中将其命名为:

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

看看是否有效。

答案 1 :(得分:0)

像这样使用

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

答案 2 :(得分:0)

问题似乎是我在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。

答案 3 :(得分:-1)

在makeAdmin的路由中,仅指定POST而不是PUT。因为您在HTML表单中提到了该方法

相关问题