laravel1
github https://github.com/
SF社区 segmentfault
爆栈(overflowstack) https://stackoverflow.com/ http://overflowstack.github.io/
一、Laravel框架
laravel是世界排名第一的PHP语言的web全栈框架。从06开始发布。是一个单入口的MVC框架。
Laravel优势:
世界排名第一 ThinkPHP是中国排名第一
源码是托管在github上面的,由全世界众多的开源工作者为Laravel提供各种插件和资源。
语法简洁,清晰,可以达到没学过的人,也可以大概看到它的意思。
中文: https://d.laravel-china.org/docs/5.5/installation
Laravel的最新版本是5.5.0,2017-09-06发布。
1. Laravel的版本
1.1 Laravel的发布版本分两种
1.1.1 一般发行版
只提供 6 个月的 Bug 修复支持,一年的安全修复支持,一般不适合用来进行公司项目的开发,不过也有不少公司直接使用这个一般发行版。这种版本适合学习使用,方便我们对laravel最新的技术进行跟踪。
1.1.2 长期支持版本
两年的 Bug 修复,三年的安全更新支持,适合用来进行公司的项目开发。
我们这里学习5.4版本。
2. Laravel框架的安装
安装之前有几步工作:
- PHP版本必须大于 >=5.6
- PHP扩展必须保证以下几个要开启:
pdo
openssl
Mbstring
有三种方式:
2.1 源码包安装
- 源码包安装,这种安装方式,和我们之前的ThinkPHP框架那样, 直接下载源码压缩包,到web目录下解压,把域名指向到单入口index.php文件中。
在工作中,往往我们都是本地机子开发项目,开发完成以后,上传到服务器,所以我们在服务器重新搭建的Laravel项目都是要采用第一种做法。
安装过程中,如果出现以下错误,则表示没有开启openssl扩展。

安装完成效果:

但是,上面的安装,其实有个细节没有处理好,就是用户访问我们的网站要除了输入域名以外, 还有加上一个二级目录public。所以,我们要解决这个问题,需要把域名指向到public目录下

再次,访问域名:

2.2 Composer安装
composer 是 PHP项目的包管理器(插件、项目等源码包)
下载composer 的官网:
英文官网:
中文官网:
Windows下面下载composer

安装时,要注意 这个软件需要联网,会都国外的服务器中下载部分文件,所以有可能安装会失败!如果失败,有三种解决方案:1. 多试几次;2. 使用代理上网;3: 使用离线安装。
安装成功:

使用composer 来安装 插件和项目了。
在安装之前,还要学习composer相关的配置和命令。
- 配置中国镜像,因为默认情况下,composer 会跑到国外的服务器下载对应的安装包和框架,所以我们如果在没有代理的情况下,速度非常慢,所以需要使用一些国内的镜像服务器来下载我们的资源。

配置中国镜像有两种方式:
1. 单个项目配置[ 这种配置方式,只会在这个项目中,使用到中国全量镜像下载安装包 ]
2. 系统全局配置[ 这种配置方法,会在当前系统安装配置完成以后,所有的项目的下载安装包都会从镜像服务器下载。 ]

接下来,所有的composer 可以下载的安装包都会列在 安装包列表网站中,
这个网站中,我们可以直接搜素我们的安装包( 项目、框架、插件 )

2.3 使用composer 来安装laravel项目
composer create-project --prefer-dist laravel/laravel php25 5.4.*
--prefer-dist 主要是因为默认情况下 compose 会以源码的方式下安装所以速度较慢,因此,使用这个选项可以让composer 以 安装包的形式下载。
命令行效果:

安装成功:

如何运行项目?
- 和前面第一种方案一样,直接把域名指向到项目中的public中。
- 如果在本地机子开发,可以借助 laravel提供的工匠指令( artisan命令行工具 )来在项目的根目录下运行项目。
php artisan serve --host=域名 --port=端口
命令行效果:

接下来,我们就可以通过浏览器访问localhost:8000端口了,效果如下:

注意,这里上面的php是php.exe,我们之前安装composer时提到的要设置php.exe到环境变量中,所以对于不清楚自己系统中的php.exe在哪里的话,可以直接使用以下命令查看:
php --ini

如果出现以下错误:
则表示当前php.exe没有设置到环境变量中。去设置即可。

3. 我们接下来如何学习Laravel项目
我们一般如果是MVC框架,先把项目结构先了解,了解了目录结构以后,看工具,例如工匠指令,看完工匠指令,就需要MVC( 模型-控制器-视图) 的创建和使用。
接下来,我们已经安装好了Laravel项目了,那么我们接下里,学习Laravel的目录结构。
4. 目录结构
.env 项目的本地开发时的配置文件
app/Http/Controllers 控制器目录
默认情况下,Laravel是没有帮我们创建模型目录的,需要我们自己去创建,所以外界部分公司,模型目录一般是 app/Http/Models 或者 app/Models 。
config/ 这里的所有配置项,都是项目上线前进行配置的。
public/ 这个公共入口目录,项目上线以后,用户都是只能访问到public目录下,所以这个目录一般都是用来放 img,js,css的。
resources/views/ 视图目录
vendor/ 是composer 用来保存项目中的安装包的。以后我们开发Laravel的项目,所有使用composer安装的插件都会自动保存在这个目录中,所以这个千万不能动!
routes/ 是laravel一个非常重要的目录,叫路由。我们用户能够在地址栏上输入对应的网站能访问都对应的控制器,全靠这个routes发挥作用,接下来马上学到的。
storage/ 存储设备,以后我们项目中临时文件,session文件或我们以后上传的文件都可以保存到这个目录中。
server.php 开发时,在命令行下运行Laravel框架的文件。这个文件其实就是引入了public/index.php入口文件。
artisan 这个就是laravel提供的命令行工具,叫工匠指令,这个工匠指令,本质上来说,就是PHP文件,只是没有后缀而已。artisan 就保存在项目的根目录。
5. Laravel的工匠指令
artisan是Laravel提供的命令行工具,有时候也被人叫“脚手架”、“代码生成器”。
主要的目的是为了减轻我们的工作量,帮我们完成一些简答而经常重复的工作。
1. 启动项目
php artisan serve
--port 设置测试服务器的监听端口
2. 创建控制器
php artisan make:controller Admin\AdminController
--resource 创建资源控制器
3. 创建模型
php artisan make:model Admin
4. 查看路由列表
php artisan route:list
5. 清除项目缓存文件
php artisan cache:clear
6. 清除视图编译文件
php artisan view:clear
我们以后做项目的时候,一般都需要创建大量的控制器,其中,有部分控制器甚至还会目录或模块进行存储,例如,我们后台的管理员就有可能需要我们自己创建以后放在对应后台目录中,这样的话,我们就可以使用以下的命令:
php artisan make:controller 目录\控制器名称

我们可以借助 artisan 工匠指令,创建两种不同的控制器,分别是一般控制器和资源控制器。

一般控制器:
资源控制器(一般只会出现在网站后台模块,用于增删查改,用于提供给移动端,其他语言作为数据接口使用。):

我们安装完成了Laravel项目以后,我们看到的欢迎界面,哪里来的?
在resource/views/welcome.blade.php页面来的。
那么,上面知道了欢迎界面的位置,那么它怎么显示的?是不是控制器加载?
很明显,控制器会加载视图,依靠我们在ThinkPHP中学到的经验,可能就在控制器里面加载的。
我们通过在编辑器中查找“welcome”,最终却发现,当前welcome视图却是routes/web.php文件中的一段代码加载进来的。

接下来,我们学习下Laravel的路由。
6. 路由
6.1 路由是什么?
我们回忆下,当初我们做ThinkPHP的时候,用户为什么在浏览器中如果了一段地址,例如,
localhost/index.php/Home/Goods/detail,ThinkPHP就可以自动帮我们完成了控制器执行和视图界面的显示工作?
其实,是因为当初的THinkPHP内部也有路由,内部的路由帮我们接收了用户发过来的uri请求,并把uri请求转发给了地址中声明的控制器,由控制器接收了用户的请求信息,并返回了数据。
url = 域名 + uri地址
uri 就是url除了 域名以外的剩下一部分信息。
图示:

ThinkPHP中已经帮我们完成了路由的指向工作。
转发用户的uri请求到对应的应用程序中执行,这个过程就叫做路由。
对于路由而言,本质就是把uri地址和对应的应用程序进行一一对应的关联。
其实,用户在地址栏上输入的uri参数,也叫做路由参数。
Laravel并没有帮完成我们路由的指向工作,所以我们学习Laravel就必须先懂得怎么写路由的指向。
6.2 Route路由操作类
Laravel提供了一个路由操作类Route专门给我们用来声明路由的。
Route 提供了很多静态方法给我们使用。我们上面看到的 Route::get()就是其中最常用的方法。
Route根据http请求类型一共提供多个操作路由的方法.
6.2.1 Route::get($uri, $callback);
Route提供给我们用于客户端的http 的get类型的请求。
参数1:URI地址,用户输入地址上的uri请求
参数2:如果是函数,则是匿名函数,如果是字符串则必须是对应书写规则的控制器的方法。
例如,我们第二个参数是匿名函数(回调函数),如下:

这种路由,一般用于给第三方提供数据接口时使用的,也因为这种路由的第二个参数是匿名函数,所以这种被称为“匿名函数路由”。
例如,我们第二个参数是字符串,如下:

第二个参数的书写:
Route::post( $uri, ‘命令空间\控制器类名@方法名’ );
这种路由是我们开发中最常见的路由,因为第二个参数是控制器,所以也称为“控制器路由”。
注意:
Routes目录下,一般有两个文件,api.php里面专门写提供给其他平台或移动端数据接口的路由地址,web.php里面大部分写的都是提供给web端的路由地址。
6.2.2 Route::post($uri,$callback);
专门用来接收由客户端发送过来的Http post请求,一般用来添加数据
我们这里可以使用一个get路由地址,输出表单,表单来发送post请求,由post路由接收。

在Laravel中要发送post、put或patch或delete时要注意,必须在表单中附带一个csrf令牌字段,如果没有令牌字段,则Laravel会拒绝我们的http请求。
Laravel提供了一个辅助函数 csrf_field() 可以帮我们自动生成对应的csrf令牌字段。

同时,Laravel还提供了另一个函数 csrf_token(),只会生成一个值,用于在ajax提交时。

效果:

6.2.3 跨站请求伪造攻击 - csrf
跨站请求伪造是一种通过伪装授权用户的请求来利用授信网站的恶意漏洞。
一般攻击手段,都是恶意攻击者,实现准备好了一个页面(链接),把链接发送已经网站的用户,在用户不知情的情况下,让点击这个恶意的页面(链接),页面(链接)因为在当前用户的浏览器中发送到服务器的,所以服务器默认情况下,已经默认用户已经登录,所以对于这种恶意的链接,并不会采取验证手段,最后攻击者就实现攻击服务器。这种攻击手法叫“跨站请求伪造”。
图示:

Laravel中的csrf令牌就是为了防止项目遭受这种攻击而设置的防范机制,这种机制就是在页面中生成一个针对当前用户的唯一的令牌,只有这个用户的所属令牌字段,才能操作网站。
6.2.4 Route::delete($uri,$callback);
专门用来接收由客户端发送过来的Http delete请求,一般用来删除数据
我们要使用delete路由,必须先知道如何发送一个delete请求呢?

上面的错误,表示我们当前访问页面的方式,不允许访问当前地址对应的路由。
6.2.5 伪造表单请求
我们开发时,HTML的表单默认是没有delete、put、patch这几个发送请求的类型的,那我们如果想要在表单中发送以上三种类型的请求,可以使用 伪造表单请求来完成。
手册->HTTP层->路由:

效果:

6.2.6 Route::put($uri,$callback);
专门用来接收由客户端发送过来的Http put请求,一般用来修改数据
有时候,我们会选择在一个控制器的方法中,显示表单的页面也是提交数据的页面。
Route除了提供上面几个处理单一HTTP请求的方法以外,还提供了另外几个方法。
6.2.7 Route::match()
这种路由允许我们指定当前路由地址能够接收哪些HTTP请求, 所以这种也叫匹配路由。
Route::match( $arr, $uri , $callback);
参数1:数组,用于设置当前路由地址允许通过哪些HTTP请求方式访问!
参数2:字符串,uri地址
参数3:匿名函数或控制器字符串
代码:

效果:

6.2.8 Route::any()
用于设置当前路由,允许使用任何的HTTP请求方式来访问。所以这种路由也叫“任意路由”。
Route::any($uri, $callback);
参数1:字符串,uri地址
参数2:匿名函数或控制器字符串
代码:

6.2.9 Route::group();
这种叫做路由群组,专门用来划分不同模块路由的,通过划分,可以达到简写路由的效果。
Route::group($arr, $callback);
参数1:数组,用来指定划分的条件
参数2:匿名函数
路由群组的划分条件:
中间件( middleware )
命名空间( namespace )
子域名( domain )
路由前缀( prefix )
例如,我们做项目一般都是前台和后台,我们就可以使用路由群组,进行划分了。
代码:

7. 控制器
控制器的存储目录: app/Http/Controllers目录中。
我们使用前面创建的一个控制器Admin\UserController,使用它来完成我们对控制器内容的学习。
7.1 控制器加载视图
return view(‘目录/模板名称’);
return view(‘目录.模板名称’);
例如,我们当前控制器Admin\UserController@index方法,加载视图。
一般建议分目录存储视图模板文件,一个模块一个目录,模块下面控制器所属的视图也分子目录存储。
Laravel在控制器中加载视图,代码:

我们使用了view函数,加载视图,那么就需要在对应的视图目录中创建视图文件。
有两种视图文件,
一种就是直接模板文件名后面加上“.php”后缀,这种模板叫做“普通模板”,这种不支持使用Laravel内置的模板引擎blade。
另一种,就是模板文件名后面加上“.blade.php”后面,这种模板叫做“blade模板”,对于这种模板Laravel会默认使用 blade模板引擎对里面的内容进行解析。
路由:

控制器代码:

视图:

7.2 控制器赋值到模板中
我们可以通过view函数的第二参数进行赋值,也可以通过with方法进行赋值到模板中。
7.2.1 view的第二个参数
控制器:

视图:

7.2.2 使用with方法来赋值
控制器:

视图:

接下来,我们看下blade模板引擎的语法。
8. blade模板引擎
blade是Laravel内置的一套非常使用的,优秀的模板引擎。
8.1 输出普通变量
控制器:

视图:

8.2 循环输出数据
控制器:

视图:

效果:

8.3 注释
Laravel支持原生语法,所以对于PHP的所有代码都直接支持,包括注释。
<?php // ?>
{{-- 中间就是Laravel的注释 --}}

浙公网安备 33010602011771号