我正在嘗試鏈接到我的管理員 Laravel 管理儀表板中的編輯頁面。
但是由于某種原因,當我單擊該鏈接時,它一直顯示 404 頁面,就好像它沒有找到編輯視圖一樣。
我嘗試將視圖移動到其他目錄,更改路線,清除路線的快取,但它沒有解決問題。
應該將您帶到編輯頁面的鏈接
<a href="/admin/posts/{{ $post->id }}/edit" class="text-blue-500 hover:text-blue-600">Edit</a>
與網站管理端關聯的路由
// Admin
Route::post('admin/posts', [AdminPostController::class, 'store'])->middleware('admin');
Route::get('admin/posts/create', [AdminPostController::class, 'create'])->middleware('admin');
Route::get('admin/posts', [AdminPostController::class, 'index'])->middleware('admin');
Route::get('admin/posts/{post}/edit', [AdminPostController::class, 'edit'])->middleware('admin');
Route::patch('admin/posts/{post}', [AdminPostController::class, 'update'])->middleware('admin');
Route::delete('admin/posts/{post}', [AdminPostController::class, 'destroy'])->middleware('admin');

這是 AdminPostController 中的編輯功能
public function edit(Post $post)
{
return view('admin.posts.edit', ['post' => $post]);
}
崗位型號:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
// protected $guarded = [];
// protected $fillable = ['title','slug'];
protected $with = ['category', 'author'];
public function getRouteKeyName()
{
return 'slug';
}
public function category()
{
return $this->belongsTo(Category::class);
}
public function author()
{
return $this->belongsTo(User::class, 'user_id');
}
public function scopeFilter($query, array $filters)
{
$query->when($filters['search'] ?? false, fn($query, $search) =>
$query->where(fn($query)=>
$query->where('title', 'like', '%' . $search . '%')
->orWhere('body', 'like', '%' . $search . '%')
)
);
$query->when($filters['category'] ?? false, fn($query, $category) =>
$query->whereHas('category', fn($query) =>
$query->where('slug', $category))
);
$query->when($filters['author'] ?? false, fn($query, $author) =>
$query->whereHas('author', fn($query) =>
$query->where('username', $author))
);
}
public function comments()
{
return $this->hasMany(Comment::class);
}
}
uj5u.com熱心網友回復:
問題在于getRouteNameKey覆寫 Laravel 用來識別資料庫中的模型并執行路由模型系結的默認鍵的方法。
目前,您告訴 Laravel 使用模型的slug屬性Post作為路由模型識別符號,但是,您的鏈接正在傳遞一個ID. 因此,您要么需要getRouteNameKey從Post模型中洗掉將所有內容回傳到默認ID路由模型識別符號的方法,要么為您的鏈接提供Post slug.
<a href="/admin/posts/{{ $post->slug }}/edit" class="text-blue-500 hover:text-blue-600">
Edit
</a>
此后 Laravel 應該能夠成功地執行路由模型系結。
uj5u.com熱心網友回復:
嘗試 :
Route::get('admin/posts', [AdminPostController::class, 'index'])->middleware('admin');
Route::get('admin/posts/create', [AdminPostController::class, 'create'])->middleware('admin');
Route::post('admin/posts', [AdminPostController::class, 'store'])->middleware('admin');
Route::get('admin/posts/{post}/edit', [AdminPostController::class, 'edit'])->middleware('admin');
Route::patch('admin/posts/{post}', [AdminPostController::class, 'update'])->middleware('admin');
Route::delete('admin/posts/{post}', [AdminPostController::class, 'destroy'])->middleware('admin');
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/505799.html
上一篇:sql查詢計數不同
下一篇:獲取物件陣列的值
