萌新laravel踩坑记二:Blade 组件

大家好,萌新又来踩坑了,这次踩的是 Blade 组件
其实 Blade的语法跟之前用过的ThinkPHPSmarty之类的挺像的,看看基本上就能上手了,这里主要是几个点。

组件拆分

  • 总所周知,切图仔把页面切好后一般就是丢一个大的HTML页面过来,然后我们再根据页面进行拆分,一般会分为,head layout footer content这几大页面。
  • 要实现如上功能,在传统的模版语言中,一般都会把这几大页面拆分成不同的模版文件,然后使用类似include的指令引入进来,笔者一开始也以为是这样子拆分,但是在找了一圈,没发现类似include的语法,倒是发现了名为组件的拆分方式,研究了一番之后确实非常 amazing 啊。
  • 首先先按照传统方式,将页面拆分成head layout这两个组件(笔者这边的页面较为简单,所以不需要单独拆分footer

创建组件

  1. 使用 php artisan make:component head来创建head组件,layout组件同理
  2. 创建完成之后,会在 app/View/Components 下看到 Head.phpLayout.php,这两个就是用来渲染组件的类,可以在这里面加一下共有的逻辑,并渲染变量信息等。同时,在 resources/views/components/目录下也会发现 head.blade.phplayout.blade.php 这两个模版文件。

使用组件

组件创建完了,就需要引用组件进来,类似include指令一般。

  1. 使用 php artisan make:view index 命令创建一个模板文件,你可以在 resources/views 目录下找到 index.blade.php 这个文件。
  2. index.blade.php中加入如下代码:
    <x-layout>
    <div>hello world!</div>
    </x-layout>

    这里的 x-layout 指的是,引用 layout 这个组件,组件在模版中一般以 x-开头的形式,带上组件名,构成标签名称,标签内部的内容就指代要嵌入到组件内部的数据。

那么,组件是怎么知道要把数据放入到自己的模版中呢,答案就是 {{$slot}}这个指令,熟悉vue的同学应该很清楚,就是渲染组件默认插槽数据的意思,同理在 Blade 中也是如此。
同时,组件和组件间,也可以用 x-{组件名}的形式进行引入,例如:

  <body>
    <x-head />
    {{$slot}}
</body>

上述代码,就是在 layout.blade.php中引入 head 组件

那么,一个简单的切页布局就完成了,简单来说就是:

要渲染的页面 detail.blade.php -> 查找当前页面的所有组件 x-layout -> 再查找组件中是否包含其他组件 x-layout 包含 x-head -> 最终渲染出 HTML

踩坑记录(占位)

总结

组件这个坑,其实只是小踩了一下,因为目前用到的功能还是比较少的。总体来说用起来还是挺棒的,感觉像是写 vue 这类前端框架一样,一开始不是很理解,上手实际操作之后,就很快适应的,真的很赞。

本作品采用《CC 协议》,转载必须注明作者和本文链接
个人博客,随意转载
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5
JaguarJack

:joy: blade 组件可是甩其他的好几条街啊

5个月前 评论
zanetti (楼主) 5个月前
JaguarJack (作者) 5个月前
fatrbaby

兄弟,这个不是坑吧,只是你不够熟而已。

5个月前 评论
zanetti (楼主) 5个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!