You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中为不同视图设置不同的页面标题?

解决Laravel动态页面标题的问题

嘿,这个需求在Laravel的模板系统里很容易实现,咱们通过模板继承的@yield和@section就能搞定动态标题,具体步骤如下:

1. 修改布局文件的标题部分

首先,把你布局文件里硬编码的<title>My Website</title>改成带@yield的动态结构,同时保留默认值(这样其他页面如果没设置标题,依然会显示"My Website"):

<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 这里改成yield,默认值为My Website -->
    <title>@yield('title', 'My Website')</title>
    <link rel="stylesheet" href="{{asset('css/normalize.css')}}">
    <link rel="stylesheet" href="{{asset('css/app.css')}}">
</head>
<body>
    @yield('content')
    <script type="text/javascript" src="{{ URL::asset('js/jquery-3.2.1.min.js') }}"></script>
    <script type="text/javascript" src="{{ URL::asset('js/javascript.js') }}"></script>
</body>
</html>

2. 在作品展示视图中设置动态标题

接下来,在你的单个作品展示视图(比如resources/views/artwork/show.blade.php)里,通过@section定义标题内容,把作品名称拼接进去:

<!-- 先设置页面标题,用控制器传过来的作品名称变量 -->
@section('title', $artwork->name . ' - My Website')

<!-- 然后是作品内容部分 -->
@section('content')
    <h1>{{ $artwork->name }}</h1>
    <!-- 这里放作品的图片、描述等展示内容 -->
@endsection

3. 控制器传递作品数据

确保你的控制器(比如ArtworkController)的show方法能根据URL里的作品名称查询到对应的作品,并传递给视图:

public function show($name)
{
    // 根据作品名称查询数据,找不到则返回404
    $artwork = Artwork::where('name', $name)->firstOrFail();
    
    // 把作品数据传递给视图
    return view('artwork.show', compact('artwork'));
}

这样一来,当用户访问http://example.com/artwork/GreenGarden时,页面标题就会变成GreenGarden - My Website;访问BlueSky时则显示BlueSky - My Website,完美实现动态标题的需求~

内容的提问来源于stack exchange,提问作者Onyx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:17:46