Laravel 头部内容出现在 body 标签中

Posted

技术标签:

【中文标题】Laravel 头部内容出现在 body 标签中【英文标题】:Laravel head content appearing in body tag 【发布时间】:2014-10-27 02:18:26 【问题描述】:

我是 Laravel 的新手,我正在尝试为我正在制作的新网站创建我的第一个布局。

我遇到的问题是我想要在<head> 中的内容进入<body>,而<head> 是空的。

我有:

layout.blade.php

<!DOCTYPE html>
<html>
    <head>
        <title>@section('title')</title>
         HTML::style('https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css'); 
    </head>

    <body>
        <h1>@yield('h1')</h1>
        @yield('content')
         HTML::script('js/jquery-1.11.1.min.js'); 
         HTML::script('https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js'); 
    </body>
</html>

users.blade.php

@extends('layouts.layout')

@section('title')
    Users Page - 1

@section('h1')
    <?php echo $h1;?>
@stop

我哪里错了?

我认为@yeild@section区别是什么?

【问题讨论】:

页面其他地方可能有问题,您的浏览器正在重组。如果您查看源代码,您的 head 标签中的项目实际上可能在 head 标签中。您还需要一个@stop 在您的部分标签之后。这可能是导致问题的原因 哇,也帮帮我 【参考方案1】:

我们遇到了同样的问题,但原因不同。在@section('body') 之前的源中有两个@include。我们不知道为什么这会导致标题问题,但确实如此。原来是

@extends('layouts.plane')
@include("layouts.modal-quote-create")
@include("layouts.modal-mulch-types")
@section('body')

我们将其更改为:

@extends('layouts.plane')
@section('body')   
@include("layouts.modal-quote-create")
@include("layouts.modal-mulch-types")

这就解决了这个问题。

【讨论】:

【参考方案2】:

实际上你应该使用yield来转储内容,例如,如果你有一个主布局,例如:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
    <body>
        @yield('content')
    </body>
</html>

然后你可以在你的子视图中使用这样的东西:

extends('layouts.master')

@section('content')
   Everything within this section will be dumped
   in to `@yield('content')` in your master layout.
@stop

您应该对任何部分使用@stop 来关闭该部分。也许你可以尝试这样的事情:

<!DOCTYPE html>
<html>
    <head>
        <title> $title </title>
         HTML::style('https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css') 
    </head>
    <body>

        @yield('content')

         HTML::script('js/jquery-1.11.1.min.js'); 
         HTML::script('https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js'); 
    </body>
</html>

从您的controller,您可以传递如下标题:

return View::make('viewname')->with('title', $title);

在Laravel website 上阅读有关Templates 的更多信息。

【讨论】:

+1 获取详细信息。您认为通过视图或控制器发送诸如标题数据之类的东西更好吗(作为回报 View::make('viewname')->with('title', $title); 而不是使用 ' @yeild' '@section' 等? 是的,它更有活力。 对不起,您是指通过模板还是视图? 从控制器到视图。【参考方案3】:

layout.blade.php 中试试这个。你正在扩展这个刀片模板,所以你应该在&lt;title&gt;标签中使用@yield('title'),并且你应该在每个@section标签中使用@stop

<!DOCTYPE html>
<html>
    <head>
        <title>@yield('title')</title>
         HTML::style('https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css'); 
    </head>

<body>
    <h1>@yield('h1')</h1>
    @yield('content')
     HTML::script('js/jquery-1.11.1.min.js'); 
     HTML::script('https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js'); 
</body>

【讨论】:

谢谢,我错过了@stop

以上是关于Laravel 头部内容出现在 body 标签中的主要内容,如果未能解决你的问题,请参考以下文章

前端第一课:初识前端

HTML

vuewebupload怎么添加请求头部内容

03-body标签中相关标签

为啥我们需要 HTML 头部中的元内容类型标签?

导航栏品牌中的 Laravel 动态页面标题