我试图通过按下按钮来调用路由,但它给了我未定义路由[makeAdmin]。(View:\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,但问题仍然存在。且路线未显示在路线:列表中非常感谢您的帮助。
问题似乎是我在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。
如果我理解正确,您的route.php
中的每个/admin
路由似乎都以admin.
前缀命名
因此,也许可以尝试将路线命名为admin.makeAdmin
,并在您的视图中这样称呼它:
<form action="{{route('admin.makeAdmin', $user->id)}}" method="POST">
看看它是否有效。
像这样使用
<form action="{{route('makeAdmin',['user'=>$user->id])}}" method="POST">
在makeAdmin的路由中只指定POST而不是PUT。因为在表单HTML中,您提到了方法