在 Laravel 的 Blade 模板中,可以使用 route()
辅助函数来生成路由 URL。假设你的路由命名规则是基于资源控制器的(Resource Controller),那么可以通过以下方式在 Blade 模板中生成 /admin/posts
的链接。
1. 确保路由已命名
在 Modules/Admin/Routes/web.php
中,确保你定义了资源路由:
Route::prefix('admin')->middleware(['web', 'auth'])->group(function () {
Route::resource('posts', PostController::class);
});
Laravel 的 Route::resource
会自动为每个路由分配名称。例如:
GET /admin/posts
的路由名称是admin.posts.index
。GET /admin/posts/create
的路由名称是admin.posts.create
。- 其他路由类似。
2. 在 Blade 模板中生成链接
在 Blade 模板中,可以使用 route()
函数生成链接。例如:
(1) 显示文章列表的链接
如果你想生成一个指向文章列表页面的链接,可以这样写:
<a href="{{ route('admin.posts.index') }}" class="btn btn-primary">查看文章列表</a>
(2) 创建文章的链接
如果你想生成一个指向创建文章页面的链接,可以这样写:
<a href="{{ route('admin.posts.create') }}" class="btn btn-success">新建文章</a>
(3) 编辑文章的链接
如果你需要生成编辑某篇文章的链接(假设 $post
是文章对象),可以这样写:
<a href="{{ route('admin.posts.edit', $post->id) }}" class="btn btn-info">编辑</a>
(4) 删除文章的链接
如果需要生成删除文章的链接(通常通过表单实现),可以这样写:
<form action="{{ route('admin.posts.destroy', $post->id) }}" method="POST" style="display:inline;">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger" onclick="return confirm('确定要删除这篇文章吗?')">删除</button>
</form>
3. 完整示例:文章列表页面
以下是一个完整的 Blade 模板示例,展示如何显示文章列表并包含操作按钮(查看、编辑、删除):
@extends('admin::layouts.app')
@section('content')
<div class="card">
<div class="card-header">
<h3 class="card-title">文章列表</h3>
<a href="{{ route('admin.posts.create') }}" class="btn btn-primary float-right">新建文章</a>
</div>
<div class="card-body">
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>标题</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
@foreach ($posts as $post)
<tr>
<td>{{ $post->id }}</td>
<td>{{ $post->title }}</td>
<td>{!! $post->status_label !!}</td>
<td>
<a href="{{ route('admin.posts.edit', $post->id) }}" class="btn btn-sm btn-info">编辑</a>
<form action="{{ route('admin.posts.destroy', $post->id) }}" method="POST" style="display:inline;">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger" onclick="return confirm('确定要删除这篇文章吗?')">删除</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="card-footer">
{{ $posts->links() }}
</div>
</div>
@endsection
4. 路由名称解析
以下是 Route::resource
自动生成的路由名称和路径对应关系:
HTTP 方法 | 路径 | 路由名称 | 功能 |
---|---|---|---|
GET | /admin/posts | admin.posts.index | 显示文章列表 |
GET | /admin/posts/create | admin.posts.create | 显示创建文章页面 |
POST | /admin/posts | admin.posts.store | 保存新文章 |
GET | /admin/posts/{id} | admin.posts.show | 显示单篇文章详情 |
GET | /admin/posts/{id}/edit | admin.posts.edit | 显示编辑文章页面 |
PUT/PATCH | /admin/posts/{id} | admin.posts.update | 更新文章 |
DELETE | /admin/posts/{id} | admin.posts.destroy | 删除文章 |
5. 注意事项
-
命名空间前缀:
如果你在多模块结构中使用了命名空间前缀(如admin::
),确保视图文件路径正确。例如:return view('admin::posts.index', compact('posts'));
-
CSRF 保护:
对于POST
、PUT
、DELETE
请求,确保添加@csrf
和@method
指令以避免 CSRF 错误。 -
权限控制:
如果需要限制某些用户的访问权限,可以在路由或控制器中添加中间件进行验证。例如:Route::middleware(['auth', 'can:manage-posts'])->group(function () { Route::resource('posts', PostController::class); });
通过以上方法,可以在 Blade 模板中轻松生成路由链接,并实现文章列表的增删改查功能。