在laravel中为每个页面上的布局填充数据

Posted

技术标签:

【中文标题】在laravel中为每个页面上的布局填充数据【英文标题】:Filling data for layout on each page in laravel 【发布时间】:2015-12-11 19:00:33 【问题描述】:

我们有一个网站,您可以在其中更改布局:标题页、面包屑导航、简短描述、标题上的图标以及每个页面特定的其他元素。

我们这样做:

在每个控制器中定义信息(因为它是基于我们显示的页面/模型的动态) 发送到视图 在我们设置的视图中,那些在布局刀片中使用 @yield 声明的 sn-ps 部分设置。

它看起来有点冗长。有什么我们应该应用的模式吗?

layout.blade.php

<html>
<head>
<title>@yield('html.title')</title>
</head>
<body>
<h1>@yield('body.title')</h1>
<article>
 @yield('body.content')
</article>
</body>

controller.php

function index()
$config['title']='Title tag';
$config['h1]='H1 Title tag';

return view('index',compact('config'));

index.blade.php

@extends('layout')
@section('html.title',$config['title']);
@section('body.title',$config['h1']);

@section('body.content')
this is tje page content
@endsection

认为您必须像这样为每个页面定义 6-7 个 sn-ps。我认为这对于控制器来说太冗长了,因为控制器只是将请求传递给必要的服务以返回正确的视图。

【问题讨论】:

请在解释的同时发布您的代码,因为这样会更容易看到您认为冗长的内容。 另外,这并不是一个真正的具体问题,但听起来像是对设计原则的建议,这对 SO 来说不是正确的问题。 @TimLewis:我添加了更多信息。这可能是一个设计原则,但我的问题是除了来自控制器之外,我不知道如何访问数据。我认为这是我的问题。 不是来自控制器?我不认为我遵循...您似乎正在使用控制器来定义每个页面的@section(),但这似乎不正确。我在我的应用程序设计中使用了类似的方法,但是我有许多扩展 layout.blade.php 的文件,每个文件都有自己的 @section("title")@section("content") 等。因此,我将使用 @section("title", $config["title"]) 而不是 @section("title", $config["title"])实际的index.blade.php。另外,请注意,@endsection 在 Laravel 5.0+ 中技术上已弃用 @TimLewis:我明白你的意思。所以如果你需要生成动态的(基于一些规则):“This is my Index Title”,你在哪里定义呢?在控制器中?在视图中? 【参考方案1】:

我倾向于尝试将这些内容放在视图中 - 在我看来,页面标题更多地是演示文稿的一部分,而不是数据的一部分。例如,我有一个像这样的cancel.blade.php 文件:

@extends("templates.core",[
    "title"=>"Cancel My Account",
    "description"=>"We're sad that you're leaving"
])


@section('content')
   ... stuff here ...
@stop

【讨论】:

我不知道extends的第二个参数...这会缩短一些代码,例如:@extends("layout,$layoutSnippets);

以上是关于在laravel中为每个页面上的布局填充数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 在引导模式中为每个 id 获取动态数据?

TODO:Laravel 使用blade标签布局页面

如何在laravel中为每个用户生成唯一的随机值并将其添加到数据库中

如何在 laravel 中为每个用户生成唯一的自动增量值并将其添加到数据库中

如何在熊猫中为每个组做前向填充

为报表选择多个参数,如何在参数列表中为每个项目创建多个页面?