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数据。

LaravelSESSION是仿照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’];

}

 

LaravelSESSION保存路径在于 storage/framework/sessions/目录。

LaravelSESSIOn保存方式有多种,默认是以文件的方式保存,如果要对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中,一共提供了三种操作数据库的方式,供我们自由选择。

  1. 原生SQL查询,就是我们以前使用PDO类进行操作
  2. DB查询构建器(DB查询构造器),类似我们之前在ThinkPHP学到的连贯操作。
  3. 模型操作操作( 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()          #使用主键查询一条数据

控制器代码:

 

 

路由代码:

 

 

posted @ 2017-10-06 19:01  奋斗的黑蜗牛1号  阅读(221)  评论(0)    收藏  举报