简书 http://www.jianshu.com/php
看云 http://www.kancloud.cn/css
码云 https://git.oschina.net/laravel
github https://github.com/git
SF社区 segmentfaultgithub
爆栈(overflowstack) https://stackoverflow.com/ http://overflowstack.github.io/web
laravel是世界排名第一的PHP语言的web全栈框架。从06开始发布。是一个单入口的MVC框架。ajax
Laravel优点:segmentfault
世界排名第一 ThinkPHP是中国排名第一api
源码是托管在github上面的,由全世界众多的开源工做者为Laravel提供各类插件和资源。数组
语法简洁,清晰,能够达到没学过的人,也能够大概看到它的意思。
中文: https://d.laravel-china.org/docs/5.5/installation
Laravel的最新版本是5.5.0,2017-09-06发布。
只提供 6 个月的 Bug 修复支持,一年的安全修复支持,通常不适合用来进行公司项目的开发,不过也有很多公司直接使用这个通常发行版。这种版本适合学习使用,方便咱们对laravel最新的技术进行跟踪。
两年的 Bug 修复,三年的安全更新支持,适合用来进行公司的项目开发。
咱们这里学习5.4版本。
安装以前有几步工做:
pdo
openssl
Mbstring
有三种方式:
在工做中,每每咱们都是本地机子开发项目,开发完成之后,上传到服务器,因此咱们在服务器从新搭建的Laravel项目都是要采用第一种作法。
安装过程当中,若是出现如下错误,则表示没有开启openssl扩展。
安装完成效果:
可是,上面的安装,其实有个细节没有处理好,就是用户访问咱们的网站要除了输入域名之外, 还有加上一个二级目录public。因此,咱们要解决这个问题,须要把域名指向到public目录下
再次,访问域名:
composer 是 PHP项目的包管理器(插件、项目等源码包)
下载composer 的官网:
英文官网:
中文官网:
Windows下面下载composer
安装时,要注意 这个软件须要联网,会都国外的服务器中下载部分文件,因此有可能安装会失败!若是失败,有三种解决方案:1. 多试几回;2. 使用代理上网;3: 使用离线安装。
安装成功:
使用composer 来安装 插件和项目了。
在安装以前,还要学习composer相关的配置和命令。
配置中国镜像有两种方式:
1. 单个项目配置[ 这种配置方式,只会在这个项目中,使用到中国全量镜像下载安装包 ]
2. 系统全局配置[ 这种配置方法,会在当前系统安装配置完成之后,全部的项目的下载安装包都会从镜像服务器下载。 ]
接下来,全部的composer 能够下载的安装包都会列在 安装包列表网站中,
这个网站中,咱们能够直接搜素咱们的安装包( 项目、框架、插件 )
composer create-project --prefer-dist laravel/laravel php25 5.4.*
--prefer-dist 主要是由于默认状况下 compose 会以源码的方式下安装因此速度较慢,所以,使用这个选项可让composer 以 安装包的形式下载。
命令行效果:
安装成功:
如何运行项目?
php artisan serve --host=域名 --port=端口
命令行效果:
接下来,咱们就能够经过浏览器访问localhost:8000端口了,效果以下:
注意,这里上面的php是php.exe,咱们以前安装composer时提到的要设置php.exe到环境变量中,因此对于不清楚本身系统中的php.exe在哪里的话,能够直接使用如下命令查看:
php --ini
若是出现如下错误:
则表示当前php.exe没有设置到环境变量中。去设置便可。
咱们通常若是是MVC框架,先把项目结构先了解,了解了目录结构之后,看工具,例如工匠指令,看完工匠指令,就须要MVC( 模型-控制器-视图) 的建立和使用。
接下来,咱们已经安装好了Laravel项目了,那么咱们接下里,学习Laravel的目录结构。
.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 就保存在项目的根目录。
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的路由。
咱们回忆下,当初咱们作ThinkPHP的时候,用户为何在浏览器中若是了一段地址,例如,
localhost/index.php/Home/Goods/detail,ThinkPHP就能够自动帮咱们完成了控制器执行和视图界面的显示工做?
其实,是由于当初的THinkPHP内部也有路由,内部的路由帮咱们接收了用户发过来的uri请求,并把uri请求转发给了地址中声明的控制器,由控制器接收了用户的请求信息,并返回了数据。
url = 域名 + uri地址
uri 就是url除了 域名之外的剩下一部分信息。
图示:
ThinkPHP中已经帮咱们完成了路由的指向工做。
转发用户的uri请求到对应的应用程序中执行,这个过程就叫作路由。
对于路由而言,本质就是把uri地址和对应的应用程序进行一一对应的关联。
其实,用户在地址栏上输入的uri参数,也叫作路由参数。
Laravel并无帮完成咱们路由的指向工做,因此咱们学习Laravel就必须先懂得怎么写路由的指向。
Laravel提供了一个路由操做类Route专门给咱们用来声明路由的。
Route 提供了不少静态方法给咱们使用。咱们上面看到的 Route::get()就是其中最经常使用的方法。
Route根据http请求类型一共提供多个操做路由的方法.
Route提供给咱们用于客户端的http 的get类型的请求。
参数1:URI地址,用户输入地址上的uri请求
参数2:若是是函数,则是匿名函数,若是是字符串则必须是对应书写规则的控制器的方法。
例如,咱们第二个参数是匿名函数(回调函数),以下:
这种路由,通常用于给第三方提供数据接口时使用的,也由于这种路由的第二个参数是匿名函数,因此这种被称为“匿名函数路由”。
例如,咱们第二个参数是字符串,以下:
第二个参数的书写:
Route::post( $uri, ‘命令空间\控制器类名@方法名’ );
这种路由是咱们开发中最多见的路由,由于第二个参数是控制器,因此也称为“控制器路由”。
注意:
Routes目录下,通常有两个文件,api.php里面专门写提供给其余平台或移动端数据接口的路由地址,web.php里面大部分写的都是提供给web端的路由地址。
专门用来接收由客户端发送过来的Http post请求,通常用来添加数据
咱们这里可使用一个get路由地址,输出表单,表单来发送post请求,由post路由接收。
在Laravel中要发送post、put或patch或delete时要注意,必须在表单中附带一个csrf令牌字段,若是没有令牌字段,则Laravel会拒绝咱们的http请求。
Laravel提供了一个辅助函数 csrf_field() 能够帮咱们自动生成对应的csrf令牌字段。
同时,Laravel还提供了另外一个函数 csrf_token(),只会生成一个值,用于在ajax提交时。
效果:
跨站请求伪造是一种经过假装受权用户的请求来利用授信网站的恶意漏洞。
通常攻击手段,都是恶意攻击者,实现准备好了一个页面(连接),把连接发送已经网站的用户,在用户不知情的状况下,让点击这个恶意的页面(连接),页面(连接)由于在当前用户的浏览器中发送到服务器的,因此服务器默认状况下,已经默认用户已经登陆,因此对于这种恶意的连接,并不会采起验证手段,最后攻击者就实现攻击服务器。这种攻击手法叫“跨站请求伪造”。
图示:
Laravel中的csrf令牌就是为了防止项目遭受这种攻击而设置的防范机制,这种机制就是在页面中生成一个针对当前用户的惟一的令牌,只有这个用户的所属令牌字段,才能操做网站。
专门用来接收由客户端发送过来的Http delete请求,通常用来删除数据
咱们要使用delete路由,必须先知道如何发送一个delete请求呢?
上面的错误,表示咱们当前访问页面的方式,不容许访问当前地址对应的路由。
咱们开发时,HTML的表单默认是没有delete、put、patch这几个发送请求的类型的,那咱们若是想要在表单中发送以上三种类型的请求,可使用 伪造表单请求来完成。
手册->HTTP层->路由:
效果:
专门用来接收由客户端发送过来的Http put请求,通常用来修改数据
有时候,咱们会选择在一个控制器的方法中,显示表单的页面也是提交数据的页面。
Route除了提供上面几个处理单一HTTP请求的方法之外,还提供了另外几个方法。
这种路由容许咱们指定当前路由地址可以接收哪些HTTP请求, 因此这种也叫匹配路由。
Route::match( $arr, $uri , $callback);
参数1:数组,用于设置当前路由地址容许经过哪些HTTP请求方式访问!
参数2:字符串,uri地址
参数3:匿名函数或控制器字符串
代码:
效果:
用于设置当前路由,容许使用任何的HTTP请求方式来访问。因此这种路由也叫“任意路由”。
Route::any($uri, $callback);
参数1:字符串,uri地址
参数2:匿名函数或控制器字符串
代码:
这种叫作路由群组,专门用来划分不一样模块路由的,经过划分,能够达到简写路由的效果。
Route::group($arr, $callback);
参数1:数组,用来指定划分的条件
参数2:匿名函数
路由群组的划分条件:
中间件( middleware )
命名空间( namespace )
子域名( domain )
路由前缀( prefix )
例如,咱们作项目通常都是前台和后台,咱们就可使用路由群组,进行划分了。
代码:
控制器的存储目录: app/Http/Controllers目录中。
咱们使用前面建立的一个控制器Admin\UserController,使用它来完成咱们对控制器内容的学习。
return view(‘目录/模板名称’);
return view(‘目录.模板名称’);
例如,咱们当前控制器Admin\UserController@index方法,加载视图。
通常建议分目录存储视图模板文件,一个模块一个目录,模块下面控制器所属的视图也分子目录存储。
Laravel在控制器中加载视图,代码:
咱们使用了view函数,加载视图,那么就须要在对应的视图目录中建立视图文件。
有两种视图文件,
一种就是直接模板文件名后面加上“.php”后缀,这种模板叫作“普通模板”,这种不支持使用Laravel内置的模板引擎blade。
另外一种,就是模板文件名后面加上“.blade.php”后面,这种模板叫作“blade模板”,对于这种模板Laravel会默认使用 blade模板引擎对里面的内容进行解析。
路由:
控制器代码:
视图:
咱们能够经过view函数的第二参数进行赋值,也能够经过with方法进行赋值到模板中。
控制器:
视图:
控制器:
视图:
接下来,咱们看下blade模板引擎的语法。
blade是Laravel内置的一套很是使用的,优秀的模板引擎。
控制器:
视图:
控制器:
视图:
效果:
Laravel支持原生语法,因此对于PHP的全部代码都直接支持,包括注释。
<?php // ?>
{{-- 中间就是Laravel的注释 --}}