php模板laravel,模板 - Laravel - 为 WEB 艺术家创造的 PHP 框架。

本文介绍了如何在Laravel中使用控制器布局指定默认视图,并详细讲解了Blade模板引擎的工作原理,包括继承、片段和自定义控制结构。通过实例演示了如何定义布局、使用Blade标签如@section和@yield,以及如何扩展Blade功能来增强视图动态处理。
摘要由CSDN通过智能技术生成

模板

控制器布局

在Laravel框架中使用模板的一种方法就是通过控制器布局。通过在控制器中指定layout属性,指定的视图就会被创建,并作为默认数据,在actions中返回。

在控制器中定义布局(Layouts)class UserController extends BaseController {

/**

* The layout that should be used for responses.

*/

protected $layout = 'layouts.master';

/**

* Show the user profile.

*/

public function showProfile()

{

$this->layout->content = View::make('user.profile');

}

}

Blade模板

Blade是Laravel框架下的一个简单但又强大的模板引擎。 不同于控制器布局,Blade模板引擎由 模板继承 和 模板片段 驱动。所有的Blade模板文件必须使用 .blade.php 文件扩展名。

定义一个Blade布局

@section('sidebar')

This is the master sidebar.

@show

@yield('content')

使用一个Blade布局@extends('layouts.master')

@section('sidebar')

@parent

This is appended to the master sidebar.

@stop

@section('content')

This is my body content.

@stop

注意视图中片段只是简单的替换其extend的Blade布局中相应片段。通过在模板片段中使用@parent指令,布局的内容可以包含一个子视图,这样你就可以在布局片段中添加诸如侧边栏、底部信息等内容。

有时候,有些片段可能不能确定被定义了,你可以使用@yield结构给出一个默认值。如下,第二个值即是默认值。@yield('section', 'Default Content');

其他 Blade模板 控制结构

输出数据Hello, {{{ $name }}}.

The current UNIX timestamp is {{{ time() }}}.

检测是否存在后输出数据

有时,你可能希望输出一个变量,但又不能确定这个变量是否被设置。直接点,你可能想这么做:{{{ isset($name) ? $name : 'Default' }}}

然而,除了写一个三目运算符,Blade有如下简写方法:{{{ $name or 'Default' }}}

显示带有大括号的文本

如果你想显示带有大括号的字符串,你可以在文本前放@符号,这样会忽略Blade解析行为@{{ This will not be processed by Blade }}

当然,用户提供的全部字符串都应该都被转义(主要对html标签,利用htmlentities编码转义)。如果想转义输出,你可以使用三个大括号语法:Hello, {{{ $name }}}.

如果不希望数据被转义,可以使用双大括号语法:Hello, {{ $name }}.注意: 一定要小心输出的用户提供的内容。使用三个大括号的语法能够直接输出内容中的HTML标签。

If标签@if (count($records) === 1)

I have one record!

@elseif (count($records) > 1)

I have multiple records!

@else

I don't have any records!

@endif

@unless (Auth::check())

You are not signed in.

@endunless

循环@for ($i = 0; $i < 10; $i++)

The current value is {{ $i }}

@endfor

@foreach ($users as $user)

This is user {{ $user->id }}

@endforeach

@while (true)

I'm looping forever.

@endwhile

包含子视图@include('view.name')

你也可以传递数组数据到被包含的视图@include('view.name', array('some'=>'data'))

覆盖片段

默认的,片段是附加在先前存在的片段上,如果想覆盖一个片段的全部,可以使用overwrite标签@extends('list.item.container')

@section('list.item.content')

This is an item of type {{ $item->type }}

@overwrite

输出多语言@lang('language.line')

@choice('language.line', 1);

注释{{-- This comment will not be in the rendered HTML --}}

扩展Blade

Blade允许用户定义自己的控制结构。当一个Blade文件被编译后,会调用用户自定义的扩展,用来处理视图内容,从简单的str_replace操作,到很复杂的表达式,总之,你可以做任何事情。

Blade的编译器附带了帮助函数createMatcher和createPlainMatcher,这两个函数可以生成自定义指令。

createPlainMatcher函数主要用于没有参数传递的指令,类似@endif和@stop,而createMatcher则用于那些有参数传递的指令。

下面的例子创建@datetime($var)指令,它只是简单的对$var调用->format()方法:Blade::extend(function($view, $compiler)

{

$pattern = $compiler->createMatcher('datetime');

return preg_replace($pattern, '$1<?php echo $2->format('m/d/Y H:i'); ?>', $view);

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值