如何解决我的 Laravel 8 应用程序中出现与路由相关的错误的原因是什么? 问题
我正在开发一个需要用户注册和登录的 Laravel 应用程序。
更改注册后,用户可以将默认头像替换为他们选择的图片。
他们也应该能够删除这张图片并恢复到默认头像 (default.png)。为此,我做了以下工作:
在 routes/web.php
中,我有必要的路线:
Auth::routes();
Route::get('/dashboard',[App\Http\Controllers\Dashboard\DashboardController::class,'index'])->name('dashboard');
Route::get('/dashboard/profile',[App\Http\Controllers\Dashboard\UserProfileController::class,'index'])->name('profile');
Route::post('/dashboard/profile/update','update'])->name('profile.update');
Route::post('/dashboard/profile/deleteavatar','deleteavatar'])->name('profile.deleteavatar');
在 Controllers\Dashboard\UserProfileController.php
我有:
// Delete avatar
public function deleteavatar($id) {
$current_user = Auth::user();
if ($id == $current_user->avatar) {
$current_user->avatar = "default.png";
$current_user->update();
}
}
在视图中我有这个删除按钮:
<a href="#" class="icon text-light" id="delete-avatar" data-uid="{{$current_user->id}}"><i class="fa fa-trash"></i></a>
该方法通过 AJAX 执行:
(function() {
//Delete Avatar
$('#delete-avatar').on('click',function(evt){
evt.preventDefault();
var $avatar = $('#avatar-container').find('img');
var $topAvatar = $('#top_avatar');
var $trashIcon = $('#delete-avatar');
var defaultAvatar = APP_URL + '/images/avatars/default.png';
//Get user's ID
var id = $(this).data('uid');
if(confirm('Delete the avatar?')) {
$.ajax({
url: APP_URL + '/dashboard/profile/deleteavatar/' + id,method: 'GET',dataType: 'html',success: function(){
$avatar.attr('src',defaultAvatar);
$topAvatar.attr('src',defaultAvatar);
$trashIcon.remove();
}
});
}
});
})();
问题
由于我无法弄清楚的原因,每当我单击删除按钮时,我都会在浏览器中收到此错误:
http://larablog.com/dashboard/profile/deleteavatar/1 404 (Not Found)
我做错了什么?
解决方法
您已将路由定义为 post 方法
Route::post('/dashboard/profile/deleteavatar',[App\Http\Controllers\Dashboard\UserProfileController::class,'deleteavatar'])->name('profile.deleteavatar');
在 ajax 中你作为
if(confirm('Delete the avatar?')) {
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajax({
url: APP_URL + '/dashboard/profile/deleteavatar/' + id,method: 'POST',data:{
id:id,_token: CSRF_TOKEN,}
success: function(){
$avatar.attr('src',defaultAvatar);
$topAvatar.attr('src',defaultAvatar);
$trashIcon.remove();
}
});
}
更新
正如我看到你的代码,你正在尝试删除登录用户头像。所以
public function deleteavatar() {
$current_user = Auth::user();
$current_user->avatar = "default.png";
$current_user->save();
}
更改路线为
Route::get('/dashboard/profile/deleteavatar','deleteavatar'])->name('profile.deleteavatar');
在 Ajax 中
(function() {
//Delete Avatar
$('#delete-avatar').on('click',function(evt){
evt.preventDefault();
var $avatar = $('#avatar-container').find('img');
var $topAvatar = $('#top_avatar');
var $trashIcon = $('#delete-avatar');
var defaultAvatar = APP_URL + '/images/avatars/default.png';
//Get user's ID
var id = $(this).data('uid');
if(confirm('Delete the avatar?')) {
$.ajax({
url: APP_URL + '/dashboard/profile/deleteavatar/',method: 'GET',dataType: 'html',success: function(){
$avatar.attr('src',defaultAvatar);
$topAvatar.attr('src',defaultAvatar);
$trashIcon.remove();
}
});
}
});
})();
,
必须是:
- GET(如 ajax)
Route::post('/dashboard/profile/deleteavatar/{id}','deleteavatar'])->name('profile.deleteavatar');
和
$.ajax({
url: APP_URL + '/dashboard/profile/deleteavatar/' + id,defaultAvatar);
$trashIcon.remove();
}
});
- POST(如路由)
Route::get('/dashboard/profile/deleteavatar/{id}',defaultAvatar);
$trashIcon.remove();
}
});
- 删除(RESTful)
Route::delete('/dashboard/profile/deleteavatar/{id}',method: 'DELETE',defaultAvatar);
$trashIcon.remove();
}
});
,
这是我得到的最终版本:
在routes\web.php
中:
Route::post('/dashboard/profile/deleteavatar/{id}','deleteavatar'])->name('profile.deleteavatar');
在控制器中:
// Delete avatar
public function deleteavatar($id) {
$current_user = Auth::user();
$current_user->avatar = "default.png";
$current_user->save();
}
在 app.js 中:
(function() {
//Delete Avatar
$('#delete-avatar').on('click',function(evt) {
evt.preventDefault();
var $avatar = $('#avatar-container').find('img');
var $topAvatar = $('#top_avatar');
var $trashIcon = $(this);
var defaultAvatar = APP_URL + '/images/avatars/default.png';
//Get user's ID
var id = $(this).data('uid');
if (confirm('Delete the avatar?')) {
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajax({
url: APP_URL + '/dashboard/profile/deleteavatar/' + id,data: {
id: id,},success: function() {
$avatar.attr('src',defaultAvatar);
$topAvatar.attr('src',defaultAvatar);
$trashIcon.remove();
}
});
}
});
})();
它有效。
非常感谢所有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。