laravel3学习笔记(四)

原作者博客:ieqi.net

====================================================================================================

视图

Laravel3遵循MVC模式,视图层负责将控制器处理好的数据展示出来,view层相关代码文件保存在application/views目录下,并且以php结尾。

因为PHP本身就可以和HTML混写的特性,一般而言,PHP框架的View层某种程度上也可以作为模板使用。

比如我们建立一个文件 application/views/home/index.php :

    Hello World!

这样,我们就可以在处理请求返回时调用view渲染:

// 路由回调方法
Route::get(‘/‘, function()
{
    return View::make(‘home.index‘);
});

// controller 中的方法
public function action_index()
{
    return View::make(‘home.index‘);
});

注意上面make()方法中的参数,使用.作为层级划分,没有php后缀,与views文件夹下的文件对应一目了然。

我们可以通过下述方法,探测view是否存在:

$exists = View::exists(‘home.index‘);

有时,我们需要设定特殊的http状态码,或者是http头信息,我们可以这样在返回时处理:

$headers = array(‘foo‘ => ‘bar‘);
return Response::make(‘Hello World!‘, 200, $headers);

注意,上述的make方法不是View类中的make,而是Response中的make方法。

返回view并绑定数据:

return Response::view(‘home‘, array(‘foo‘ => ‘bar‘));

返回json格式数据:

return Response::json(array(‘name‘ => ‘Batman‘));

直接利用orm返回json数据,前提当然是你有使用orm:

return Response::eloquent(User::find(1));

绑定数据渲染view

Laravel3提供多种方式在渲染View时绑定数据,为开发者提供最大的便利(语法糖猛了一点)。

With绑定

return View::make(‘home‘)->with(‘name‘, ‘James‘);

然后就可以在名为home的view中使用变量$name了,变量值为 ‘James’

with绑定可以链式使用:

View::make(‘home‘)
    ->with(‘name‘, ‘James‘)
    ->with(‘votes‘, 25);

绑定数组:

View::make(‘home‘, array(‘name‘ => ‘James‘));

可以将绑定属性当做view类的属性处理:

$view->name  = ‘James‘;
$view->email = ‘[email protected]‘;

还可以用类数组的方式操作:

$view[‘name‘]  = ‘James‘;
$view[‘email‘] = ‘[email protected]‘;

这么多种的数据绑定方式,总有一款适合你。

给view命名

给命名view有什么意义呢?和命名路由一样,增加一层命名抽象,我们就可以减少在变更view本身文件名等改动时其他部分的改动成本。

首先注册view的命名,需要写到 routes.php 中:

View::name(‘layouts.default‘, ‘layout‘);

调用时,这样使用;

return View::of(‘layout‘);

绑定数据:

return View::of(‘layout‘, array(‘orders‘ => $orders));

当然,也可以使用with绑定数据。

return View::of(‘layout‘)->with(‘name‘, ‘Will‘);

view合成器

一般网页上有很多相对固定的块区,展示相对固定的东西,比如导航栏,比如最新文章之类。如果我们每次渲染view都将这些数据绑定到前端,不仅使得代码臃肿而且不利于维护。

题外话:
这个问题其实可以看做考察一个web框架的标杆,web框架能为我们开发web提供什么样的便利?漂亮的文件组织?orm?MVC?模板系统?这些都很重要,但是说实话现在大多框架这些方面做的都很好,可以说除了结构、编码风格以外没什么差别了。而对块区的处理则最能展现各个框架的特点。在yii中,我们有Widget,在flask中我们有blueprint和content。

在Laravel3中我们可以通过,view合成器来解决这个问题,view合成器需要在routes.php文件中编写;

View::composer(‘home‘, function($view)
{
    $view->nest(‘footer‘, ‘partials.footer‘);
});

通过上述代码,我们给home这个view嵌入了partials.footer这个子view。

我们还可以一次合成多个view

// 合成器处理home和profile这两个view
View::composer(array(‘home‘, ‘profile‘), function($view)
{
    //
});

laravel3学习笔记(四)

时间: 2024-08-27 14:14:04

laravel3学习笔记(四)的相关文章

laravel3学习笔记(十四)

原作者博客:ieqi.net ==================================================================================================== 运行时配置 在 Laravel3 中很多地方我们都可以看到“约定大于配置”的影子,我本人也很喜欢这种工程哲学尤其是在框架领域,当然这并不能代替所有的配置.我们知道 Laravel3 中,主要配置都写在 application/config 文件夹下,在应用逻辑中,往往

laravel3学习笔记(五)

原作者博客:ieqi.net ==================================================================================================== 模型 在MVC模式的Web框架中,模型Model作为数据的抽象而存在,在Model层中,我们放置直接对数据的各种处理和操作,然后将抽象过的数据操作暴露为Model类给控制器,这样,在控制器中我们就不必拘泥于处理具体数据现实的各种细节中了,比如数据库如何连接,数据的类型

laravel3学习笔记(十五)

原作者博客:ieqi.net ==================================================================================================== 异常与日志 在应用中,我们总会遇到各种问题.各种异常,这时,记录异常发生时的状态就很重要,所以异常与日志是有着天然的关系的. 关于异常与日志的配置在文件 application/config/error.php 中. 文件中有四个配置项: 'ignore' => ar

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了

Swift学习笔记四:数组和字典

最近一个月都在专心做unity3d的斗地主游戏,从早到晚,最后总算是搞出来了,其中的心酸只有自己知道.最近才有功夫闲下来,还是学习学习之前的老本行--asp.net,现在用.net做项目流行MVC,而不是之前的三层,既然技术在更新,只能不断学习,以适应新的技术潮流! 创建MVC工程 1.打开Visual studio2012,新建MVC4工程 2.选择工程属性,创建MVC工程 3.生成工程的目录 App_Start:启动文件的配置信息,包括很重要的RouteConfig路由注册信息 Conten

NLTK学习笔记(四):自然语言处理的一些算法研究

自然语言处理中算法设计有两大部分:分而治之 和 转化 思想.一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化.前者的例子:归并排序:后者的例子:判断相邻元素是否相同(与排序). 这次总结的自然语言中常用的一些基本算法,算是入个门了. 递归 使用递归速度上会受影响,但是便于理解算法深层嵌套对象.而一些函数式编程语言会将尾递归优化为迭代. 如果要计算n个词有多少种组合方式?按照阶乘定义:n! = n*(n-1)*...*1 def func(wordlist): length = le