laravel2
1. blade模板引擎

1.1 数据显示
1.1.1 输出普通变量
把从控制器中赋值过来的数据,使用 双花括号包住即可。
控制器:

视图:

路由:

效果:

由于Laravel框架内部对于XSS攻击也进行一定过滤防范,所以我们正常输出普通数据没问题,但是我们如果想要输出代码,则直接被Laravel使用htmlspecialchars 进行转义了。
效果如下:
控制器:

视图:

效果:

HTML源码:

很明显,进行特殊字符的转义。
当然,如果我们的服务器端,真的要输出原生的代码到页面,还是可以输出的。
{!! $变量 !!}
如下:
控制器:

视图:

效果;

源码:

1.1.2 判断一个变量是否在视图是可用的。防止出现未定义的变量错误。

1.1.3 blade定界符也支持直接使用PHP原生语法

1.1.4 输出双花括号,设置blade不要解析内容

效果:

1.1.5 设置大范围的、多行的双花括号不要被解析
使用@verbatim

1.1.6 循环输出数据
控制器;

视图:

效果:

1.1.7 判断语句

效果:

1.2 视图布局(模板布局)
视图布局的本质就是为了把公共代码部分分离,达到代码共用的效果。
这里,我们为了演示效果,新建一个控制器和路由。
命令行创建控制器:

控制器:

路由:

在模板目录中resources/views/index/目录下面新建index.blade.php模板

接下来,视图代码:

接下来,我们再次到控制器中创建一个goods方法,加载goods.blade.php视图。
goods.blade.php的代码:


上面两个模板很明显, 存在了共用部分,在开发中,肯定要公共部分的代码分离。
在Laravel中,目前有两种分离模板的方式。
1.2.1 分离模板
1.2.1.1 使用 @include 引入公共模板
分离子模板到一个公共模板目录common中存储

common/header.blade.php子视图代码:

接下来,我们就可以剔除掉原来在goods.blade.php 和 index.blade.php中的头部代码,通过@include标签引入子视图header.blade.php。
index.blade.php视图代码:

goods.blade.hp视图代码:

效果:

脚部子视图的分离也是一样,这里,同学们可以试一试。
1.2.1.2 使用模板继承来分离模板
模板继承本质上来说,就一种分离视图的技术,它是通过把视图的公共代码放在公共父级视图中,然后由其他页面的子视图使用extends标签继承父级视图中的公共代码。
之前的include图示:

模板继承的图示:

我们可以在子视图中使用 @exends标签从父级模板common.blade.php 里面的到所有的公共代码,
并且,我们还可以在子视图使用 @secion(‘区块名’) 修改在父级模板中声明的 @yield(‘区块名’) 对应的部分代码内容。
子视图,代码:

公共视图(父级视图),代码:

效果:

接下来,我们继续学习控制器的相关内容。
2. 控制器的请求操作和响应操作
控制器的文件名 和 控制器类名必须一致!建议以Controller.php结尾。方便识别。
控制器的类名或文件名 建议遵守大驼峰命名写法,例如IndexController控制器。
2.1 控制器的请求操作
Laravel提供了一个Request类给我们用来接收用户的请求操作。
Request类位于 Illuminate\Http\Request.php命名空间下,文件具体位置:
\vendor\laravel\framework\src\Illuminate\Http\Request.php
为了方便我们的演示,所以在 IndexController中新建了一个request方法和路由,
控制器代码:

路由代码:

2.1.1 实例化Request类

除了上面在操作方法中使用形参来进行实例化类以外,我们还可以通过辅助函数request()的方式来进行实例化。

使用辅助函数的好处就是不需要对当前要操作的类进行实例化了。也不需要导入要操作的类了,对于Laravel中提供大部分内置的类,它都会有对应的函数,帮我们简写实例化类的辅助函数。
2.1.2 请求参数

2.1.3 使用一次性session存储数据
Laravel提供了一种特殊的SESSION数据,这种数据只会保存一次,提取一次,这种数据叫一次性SESSION,也就是当我们使用了这种一次性的SESSION以后,在下一个页面中我们可以提取这种数据,但是如果再次刷新当前页面或跳转到别的页面时,那么这种一次性SESSION就会被删除掉。
一次性session的类声明文件:
\vendor\laravel\framework\src\Illuminate\Http\Concerns\InteractsWithFlashData.php
使用Request的flash方法可以帮我们把用户提交过来的信息保存到一次性session中。
为了方便演示,我们新建几个方法来显示一次性SESSION的使用:
控制器:

路由代码:

上面代码的效果,就是当我们在post页面填写完数据,

提交以后,就提交到set页面

我们可以打印数据,同时也把用户提交的数据保存到了一次性SESSION里面。
这时候,我们就可以在任意一个页面中, 读取到上一个页面中存储的一次性session数据。
show页面,效果:

2.2 控制器的响应操作
Laravel提供了Response响应操作类给我们,专门用来返回数据和响应用户的请求信息。
响应操作类位于Illuminate\Http\Response,类文件具体位于
\vendor\laravel\framework\src\Illuminate\Http\Response.php
Laravel对于用户的响应操作,划分成了两种不同的形式,
一种是返回数据的响应操作,这一类的操作全部可以通过使用 Response类完成。
另一种是页面跳转的响应操作,这一类的操作全部都是通过另一类 Redirect类来完成。
2.2.1 响应的主体内容
控制器:

效果:

2.2.2 自定义响应的实例
开发的时候,有时候我们并不是都统一返回json数据给客户端/或其他平台,也可能需要我们返回xml或其他类型的数据,那么我们也可以使用response类提供的方法来返回自定义的内容。
例如,微信使用的部分接口的返回数据就要求是xml,那么我们就可以Response类提供方法来返回。
效果:

2.2.3 页面跳转(重定向)
Laravel提供了一个Redirect类供我们进行页面跳转。
Redirect类位于Illuminate\Routing\Redirector 命名空间下,文件在
\vendor\laravel\framework\src\Illuminate\Routing\Redirector.php
2.2.3.1 实例化Redirect
实例化Redirect有两种方式:


Laravel也提供了redirect类的简写函数方式,直接通过调用redirect() 函数直接进行操作。

redirect提供了多个操作供我们进行页面跳转
跳转到指定路由地址 $redirect->to();
跳转到指定的别名路由中,$redirect->route(‘路由别名’);
2.2.3.1.1 定义路由的别名

跳转到指定的控制器方法中

3. 控制器的会话技术
会话技术主要有session和cookie。
3.1 session
我们可以通过Laravel提供的request类来快速操作session数据。
Laravel的SESSION是仿照PHP原生的SESSIOn,自己实现的,所以我们可以在浏览器中,看到laravel_session的cookie。

3.1.1 操作session数据
控制器:

路由:

对于Laravel里面的SESSION,其实是Laravel自己实现的。这种实现方式,他可以根据自己框架/项目的业务来进行相关业务配置。
因为Laravel使用的session不是原生的SESSION,所以会在 部分外部的接口代码中,遇到了对方使用原生的session,我们只需要在对接数据的地方,如果有SESSION 则 直接写上对应的兼容代码就可以了。
// 获取session
session_start();
if(! $is_login = $request->session()->get(‘is_login’) ){
$is_login = $_SESSION[‘is_login’];
}
Laravel的SESSION保存路径在于 storage/framework/sessions/目录。
Laravel的SESSIOn保存方式有多种,默认是以文件的方式保存,如果要对session进行设置,直接可以在config/session.php 配置文件。
driver 设置SESSION的保存方式,一般都是 file、database、memcached、redis。
files 当我们设置session的保存方式为文件时,files用于指定session的保存路径。
3.2 cookie
Laravel中,关于cookie的操作,我们可以通过Response响应操作类来进行操作。
laravel中的cookie就是PHP原生的cookie

cookie的使用流程示意图:

3.2.1 设置cookie
$response->cookie($username,$value,$time);
$time 以分钟作为单位,和原生的不一样.原生的setcookie是以秒作为单位的。
PHP的cookie设置 setcookie(‘username’,’小灰灰’,time() + 2*60);
路由:

控制器代码:

效果:

3.2.2 读取cookie
Laravel中读取cookie需要使用 Request类来进行读取。
代码:

效果;

4. 数据库操作
laravel中,一共提供了三种操作数据库的方式,供我们自由选择。
- 原生SQL查询,就是我们以前使用PDO类进行操作
- DB查询构建器(DB查询构造器),类似我们之前在ThinkPHP学到的连贯操作。
- 模型操作操作( Eloquent ORM ),类似我们之前在ThinkPHP里面的学习的模型操作。
我们要操作必须先启动数据库,并且在Laravel设置数据库链接。
因为我们这里使用了phpStudy集成环境,所以我们直接启动数据库即可。

接下来,我们就到mysql创建一个数据库。
create database `php25` charset=utf8;
效果:

4.1 配置数据库链接
数据库链接的配置文件在config/database.php,但是这个配置文件中的信息,最好在公司上线的时候,配置对应的服务器的信息。

而我们在本地机子开发,则建议在 项目的根目录下,在.env文件中进行配置。

根据自己当前的数据帐号密码填写上去即可。

如果验证,我们填写在.env里面的配置信息生效了?
我们可以直接在控制器代码中, 使用env函数来读取.env文件里面对应的配置项。如果得到的内容和我们填写的一致,表示生效,如果不一致,在需要更新。
控制器代码:

效果:

上面输出的内容和我们最新的不一样,这个时候,我们需要重启项目.
所以,以后我们凡是修改了.env文件,都需要重新启动我们的Laravel项目。
当然,如果修改的config目录下的配置文件则不需要重启项目。
4.1.1 补充细节:设置表前缀

4.2 原生SQL查询
在Laravel使用原生SQL查询功能,可以通过DB类来进行操作,DB类提供了很多的静态给我们使用。
DB提供了5个常用的方法供我们操作数据,
DB::select(); 读取数据
DB::insert(); 添加数据
DB::delete(): 删除数据
DB::update(); 更新数据
DB::statement(); 执行一条除了增删查改以外的sql语句
4.2.1 复习PDO的操作

4.2.2 使用Laravel提供的原生SQL查询
Laravel中,提供了DB类,是特殊类。这个类,我们要使用只能通过引入类以后,使用它的静态方法来调用。
DB类,命名空间位于 Illuminate\Support\Facades\DB;
路由代码:

控制器代码:
4.2.2.1 导入DB类

4.2.2.2 数据库操作

效果:

4.3 DB查询构造器
DB查询构造器,是Laravel里面我们用来操作数据库的一种最常用的操作方式,甚至后面我们学习模型的时候,也是在模型里面调用DB查询构造器来实现数据操作的。
在Laravel使用DB查询构造器,也是通过DB类来调用的。
所以,也是导入和上面第一种方法中的DB类一样
use Illuminate\Support\Facades\DB; #也可以简写成 use DB;
DB查询构造器中常用的方法:
DB::table() #指定要操作的表名
DB::select() #要查询的字段
DB::get() #获取多条数据
DB::first() #查询一条数据
DB::find() #使用主键查询一条数据
控制器代码:

路由代码:


浙公网安备 33010602011771号