【发布时间】: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”,你在哪里定义呢?在控制器中?在视图中?