相对于 MC;
laravel的视图V可能是最容易上手的;
但是如果想用好;
那也是我们 phper 最难掌握的部分;
因为它涉及到了领域叫前端;
laravel 和 node.js 有着非常紧密的结合;
这也正是 laravel 强大的原因之一;
它不仅仅是一个 php 框架;
它更是一个全栈框架;
不熟悉 node.js 的童鞋很难发挥出它巨大的威力;
不过没关系;
它的基础功能就够我们用了;
先入门;
高深的部分咱边用边学;
thinkphp 的视图模板文件就是以.html
为后缀的;
写 html 的童鞋会很熟悉;
而 laravel 全框架则一个 html 文件都木有;
laravel 的前端模板用的是 blade ;
所有的模板文件都是以.blade.php
为后缀;
稍微吐槽下;
作为一个喜欢精简的处女座;
有目录作为限制;
我是不喜欢这种啰嗦一长串的方式;
这给我有种 thinkphp 控制器的 .class.php
后缀的既视感;
不过这都不是问题;
就当 .blade.php
是 .html
就行了;
该怎么写 html 还怎么写;
先来说在 html 写 php 的控制结构;
thinkphp 中把 php 的 foreach 、 if 等都定义成 html 标签的形式;
我当年还写文章讲解怎么自定义标签来着;
thinkphp 自定义模板标签 (一);
拿循环数据的 foreach 举个栗子;
thinkphp 中有 foreach 和 volist ;
写出来是下面这个样子的;
<p>下面是 foreach 标签</p>
<foreach name="list" item="vo" key="k" >
{$k}|{$vo}
</foreach>
<p>下面是 volist 标签</p>
<volist name="list" id="vo" offset="5" length='10'>
{$vo.name}
</volist>
吐槽完了 laravel 咱来吐槽下 thinkphp 呗;
首先 thinkphp 这种标签的形式给大家增加了学习成本;
循环个数据都有两个标签;
这就算了标签中的属性名还都不一样;
反正我是经常代码敲到要循环数据的时候;
我得先想下我是要用 foreach 还是 volist 呢?
然后再想下定义 value 的属性是 item 还是 id 呢?
最后还要考虑下这个 offset 和 length 的用法;
还有就是这些标签和 html 混搭不是很好分辨;
laravel 在这方面做的就比较优雅了;
只是加个@符号就行了;
代码就是下面这个样子了;
<p>下面是 foreach 标签</p>
@foreach($list as $k => $v)
{{ $v['name'] }}
@endforeach
而控制循环的起止个数可以用$loop
;
通过上面代码;
我们也可以很容易就发现了;
thinkphp 在 html 中输出变量使用的是一个花括号{}
;
laravel 使用的是两个花括号{{}}
;
接着来讲下模板继承;
一般网站开发的时候都是有大面积的公共部分;
比如说我的博客;
顶部的导航菜单、右侧、底部都是通用的;
只有左侧是变化的;
模板继承功能就是处理这种场景的;
thinkphp 使用的是 block
;
laravel 这次则反过来有两种情况;
在父级模板中;
只有简单纯文字的时候就用 yield
比如说网站 title ;
如果是大段代码的话就用 section
;
点到为止;详细的看文档;
有了模板文件;
就是要分配数据了;
父级模板中的那些公共部分的数据大多也是通用的;
还是比如说顶部的导航菜单、右侧、底部的数据也都是通用的;
如何共用这部分数据呢?
thinkphp 中我们是通过使用控制器继承的方式分配数据;
laravel 可以使用 View::composer
;
可以先看下官方文档 HTTP 层 —— 视图 ;
主要是通配符;
比如说我们要给前端 home 模块分配分类 category 数据;
在 /app/Providers/AppServiceProvider.php 文件的 boot 中;
// 分配前台通用的 category 数据
view()->composer('home/*', function ($view) {
// 获取配置项
$category = Category::all();
$assign = [
'category' => $category
];
$view->with($assign);
});
这里需要提醒下;
第一个参数的 home/*
;
指的是 resources/views/home
目录;
此目录下的所有模板文件都将分配 category
数据;
控制器中分配数据和载入模板文件前面文章讲了点;
thinkphp中的分配数据是使用 assign;
以文章首页的方法为例;
public function index(){
$assign = [
'title' => '白俊遥文章的标题',
'content' => '白俊遥文章的内容'
]
$this->assign($assign);
$this->display('Home/Index/index');
}
如果当前的方法要引入的html页面跟控制器目录结构一致;
那 display 是可以不传参数的;
Home 模块下的 IndexController 的 index 方法中;
display 不传参数跟传'Home/Index/index'
是一样的;
$this->display()
$this->display('Home/Index/index');
到了 laravel 中就是这个样子的了;
public function index(){
$assign = [
'title' => '白俊遥文章的标题',
'content' => '白俊遥文章的内容'
]
return view('home.index.index', $assign);
}
laravel 用 view 函数可以实现分配和引入页面两个功能;
第一个参数是要引入的页面相对于resources/view
的路径;
如果习惯 thinkphp 的用斜线分割的方式;
laravel 也是支持的;下面这两种写法是相等的;
return view('home.index.index', $assign);
return view('home/index/index', $assign);
这里推荐使用点 .
分割;
因为 phpstorm 默认是可以识别laravel项目的.分割的;
在控制器中按着 ctrl 点 'home.index.index'
是可以直接打开该文件的;
相当之方便;
如果完全复制之前文章的话;
那不是显得太懒了;
这里讲个小技巧;
可以通过 compact
函数组合 $assign
数组;
再举个栗子吧;
public function index()
{
$article = Article::all();
$category = Category::all();
$tag = Tag::all();
$assign = [
'article' => $article,
'category' => $category,
'tag' => $tag
];
return view('home.index.index', $assign);
}
上面代码等同于下面代码;
public function index()
{
$article = Article::all();
$category = Category::all();
$tag = Tag::all();
$assign = compact('article', 'category', 'tag');
return view('home.index.index', $assign);
}
好了;
去掉相同的代码;
不用我说童鞋们应该也知道 compact
的作用了;
实在不明白;
查下php手册吧;
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
辉 :写的可以
2018-03-21 13:56:24 回复
股票买不爱 :ceeef6cb32fc2027316004cb3cea94a8来看看
2018-02-04 10:32:29 回复
承接网站定制|seo优化 :一口气 看了7篇,感觉laravel离我不远了
2018-02-03 22:37:17 回复
云淡风晴 :它就在你的面前;
2018-02-05 00:25:51 回复
:看看
2017-09-27 14:36:28 回复
阿根廷大大华人网 :非常实用
2017-09-22 16:29:48 回复
楠楠 :有微信开发吗?
2017-09-16 13:17:49 回复
... :博主,我想问一下你这个代码片段的效果是怎么弄得
2017-09-09 12:50:35 回复
云淡风晴 :http://prismjs.com/
2018-02-05 00:26:37 回复
为人民服务 :alert("xss")
2017-09-08 15:00:59 回复
朱总 :测试评论
2017-12-03 11:47:55 回复
十月桂花香 :laravel用了一年习惯了,还是有点不舍的;现在转战ci了,不要问什么,因为跳槽了,233
2017-09-07 17:01:07 回复
云淡风晴 :自己写个博客接着用;
2017-09-09 00:13:47 回复
楠楠 :微信开发博客做吗?
2017-09-07 13:39:40 回复
爱便流通于世 :代码逻辑远远比业务逻辑难。
2017-09-07 09:39:56 回复
爱便流通于世 :
2017-09-07 09:38:33 回复
Free&quiet :想学PHP
2017-09-05 21:33:24 回复
Free&quiet :厉害了
2017-09-05 21:33:10 回复
云枫·园 :
2017-09-05 18:24:06 回复
手贱+嘴贱 :
2017-09-05 16:23:48 回复
Free&quiet :是同行吗
2017-09-05 21:33:35 回复
Free&quiet :科技化工
2017-09-05 21:34:15 回复
至死方休 :
2017-09-05 15:25:49 回复
最新评论