在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 获取动态数据?
如何在laravel中为每个用户生成唯一的随机值并将其添加到数据库中