php教程百度云
学习完上一章对Smarty模板技术(PHP从入门到精通—Smarty模板技术—Smarty模板简介、Smarty的安装和配置、Smarty模板基本语法、Smarty内置函数、Smart游戏y模板继承、Smarty缓存控制
)有一个基本的了解, Laravel框架是一种代码优雅的PHP开发框架,它可以帮助开发人员以更加简洁的方法构建一个PHP项目,使开发人员从杂乱冗长的原生代码中解放出来L游戏aravel框架是当前PHP开发领域较为流行的框架之一,接下来,本章将对Laravel框架进行详细讲解。
初识Laravel框架ØLaravel框架简介Laravel是一个功能强大、易于使用的Web应用游戏框架,它将Web项目中主要的通用任务加以封装,从而提升了项目开发的效率Laravel提供了大型稳健应用所需的各种强大工具,例如,IOC容器、控制器等,除此之外,Laravel提供对扩展包的支持,Lar游戏avel的扩展包由世界各地的开发者贡献,而且还在不断增加中。
Laravel是完全开源的,它的所有代码都可以从GitHub上获取同时,Laravel有着完美的社区支持,其语法本身的表现力和良好的技术文档游戏使编写PHP程序更加容易ØLaravel框架的技术特点Laravel以其简洁、优雅的特性获得了PHP开发者的欢迎,它引入了一系列用于实现Web项目中通用任务的强大功能,具体如下:。
l 可扩展Larav游戏el的扩展包仓库已经相当成熟,它可以帮助开发者把扩展包(Bundle)安装到应用程序中开发者可以选择将扩展包(Bundle)复制到Bundles目录,或者通过命令行工具Artisan自动安装。
l 灵活游戏性Laravel给开发者以最大的灵活性,应用逻辑即可以在控制器中实现,也可以直接集成到路由声明中,如此一来,使用Laravel既能创建非常小的网站也能构建大型的企业应用l 反向路由反向路由赋予使用者通游戏过路由名称创建URL的能力。
通过路由名称,Laravel就会自动创建正确的URLl Restful控制器Restful控制器是一项区分GET和POST请求逻辑的可选方式,它可以区分页面发出的请求逻辑并游戏做出处理l 自动加载类自动加载类简化了类的加载工作,当加载任何库或模型时,开发者无须维护自动加载配置表和手动进行其他组件的加载,Laravel框架会自动帮助使用者加载需要的文件。
l 视图组装器视图组装游戏器本质上就是一段代码,这段代码在视图加载时会自动执行例如,博客首页的“随机文章推荐”功能即可通过视图组装器实现,视图组装器中包含了加载随机文章推荐的逻辑,这样,当加载视图时,Laravel会通过视图组游戏装器完成随机文章推荐的功能。
l 反向控制容器反向控制容器提供了生成对象、随时实例化对象、访问单例对象的便捷方式反向控制意味着程序几乎不需要加载外部的库文件,就可以在代码中的任意位置访问这些对象l 迁移游戏迁移的功能类似于版本控制工具,不同的是,它管理的是数据库范式,并且直接集成于Laravel中。
开发者可以使用Artisan命令行工具生成并执行迁移指令l 单元测试单元测试是Laravel中较为重要的功游戏能,Laravel包含数以百计的测试用例,从而保障任何一处的修改不会影响其它部分的功能,这也是业内认为Laravel性能稳定的原因之一。
使用Laravel时,通过Artisan命令行工具可以运行所有的游戏测试用例,这能让代码很容易的得到单元测试l 自动分页自动分页功能避免了在业务逻辑中混入大量的分页配置代码,程序只需从数据库中获取总的条目数量,然后使用limit/offset获取选定的数据,最后调用p游戏aginate方法,让Laravel将各页链接输出到指定的视图中即可。
Laravel框架安装Ø通过一键安装包安装通过一键安装包安装Laravel相对简单,打开下载地址http://laravelaca游戏demy.org/resources-download,找到对应的超链接即可下载,使用的是Laravel5.5版本。
下载完成后,将解压后的文件夹复制到本章项目的根目录下,然后在浏览器中访问,结果如图所游戏示。
Ø通过Composer安装通过Composer安装Laravel的步骤相对复杂,开发者可以选择通过镜像文件安装,接下来针对这种方法作详细介绍1. 下载composer.phar文件打开网址http游戏s://。
getcomposer.org/download/ ,下载最新版本的Composer,如图所示。
下载完成以后,将composer.phar拷贝到PHP的安装目录,即与php.exe同级的目录游戏,如图所示。
2. 新建composer.bat文件在PHP的安装目录下新建composer.bat批处理文件,如图所示。
然后,复制、粘贴@php "%~dp0composer.phar" %*内容到c游戏omposer.bat文件中,如图所示。
接着,打开命令行窗口,输入命令SET PATH=D:/wamp64/bin/php/php7.1.9手动配置Composer环境变量,如图所示其中,D:/wam游戏p64/bin/php/php7.1.9为 Composer脚本文件所处的路径。
输入命令composer --version,查看Composer安装版本号,如图所示。
3. 开启四个扩展并重启服务器l游戏 PHP扩展:OpenSSLl PHP扩展:PDOl PHP扩展:Mbstringl PHP扩展:XML由于本书采用的是wampServer集成开发环境,所以已经默认开启四类扩展。
如果读者使用自定义w游戏amp环境,请记得开启这四类扩展并重启Apache服务器,否则会影响框架的正常使用4. 配置全量镜像打开cmd命令行窗口,输入指令composer config -g repo.packagist c游戏omposer
https://packagist.phpcomposer.com,如图所示。
5. 测试是否安装成功首先,进入本章项目根目录下,如图所示。
接着,输入命令composer create-p游戏roject --prefer-dist laravel/laravel 项目名称。例如,创建项目名1000phone,如图所示。
此时,网站根目录会自动生成项目文件1000phone,如图所示。
最后,游戏浏览器地址栏输入localhost/section18/1000phone/public/index.php,运行结果如图所示。
Laravel框架目录结构Ø根目录Laravel框架根目录结构,如图所示游戏。
接下来,对Laravel根目录结构作详细介绍,如下所示l app 目录包含了应用的核心代码,开发者编写的代码大多会放到这里l bootstrap目录包含了用于框架的启动和自动载入配置的文件,还有一个游戏cache文件夹包含了框架为提升性能所生成的文件,例如,支撑路由的文件、支撑服务缓存的文件等。
l config目录包含了应用所有的配置文件,通过这些配置文件完成Laravel的相关配置l databa游戏se目录包含了用于数据迁移及填充的文件l public目录包含了入口文件index.php和前端资源文件(图片、JavaScript、CSS等)。
l resources目录包含了视图文件及原生资源文件游戏(LESS、SASS、CoffeeScript)以及本地化语言文件l routes目录包含了应用的所有路由定义Laravel默认提供了三个路由文件:web.php、api.php和console.ph游戏p。
其中,web.php文件包含的路由都可以应用web中间件组,具备Session、CSRF防护以及Cookie加密功能,如果应用无须提供无状态的、RESTful风格的API,所有路由都会定义在web游戏.php文件中;api.php文件包含的路由应用api中间件组,具备频率限制功能,这些路由是无状态的,所以请求通过这些路由进入应用需要通过token进行认证并且不能访问Session状态;consol游戏e.php文件用于定义所有基于闭包的控制台命令,每个闭包都被绑定到一个控制台命令并且允许与命令行IO方法进行交互,尽管这个文件并不定义HTTP路由,但是它定义了基于控制台的应用入口(路由)。
l sto游戏rage目录包含编译过的Blade模板、基于文件的Session、文件缓存以及其它由框架生成的文件该目录被细分成app、framework和logs子目录,app目录用于存放应用要使用的文件,fram游戏ework目录用于存放框架生成的文件和缓存,logs目录用于存放日志文件。
在app目录的子目录中,public目录用于存储用户生成的文件,例如,可以被公开访问的用户头像等,如果想要这些文件被访问,还需游戏要在public目录下生成一个软连接指向这个目录使用者可以通过php artisan storage:link命令生成这个软连接。
l tests目录包含自动化测试的文件,其中提供了一个开箱即用的PHP游戏Unit示例;每一个测试类都要以Test开头,使用者可以通过phpunit或php vendor/bin/phpunit命令来运行测试。
l vendor目录包含所有Composer依赖ØAPP目录应用游戏程序的核心代码位于app目录下,默认情况下,该目录位于命名空间app下,并且被composer按照PSR-4自动加载标准自动加载app目录下包含多个子目录,如Console、Http、Provider游戏s等。
Console和Http目录提供了进入应用核心的API,HTTP协议和CLI是和应用进行交互的两种机制,但实际上并不包含应用逻辑换句话说,它们只是两个向应用发布命令的方式Console目录包含了游戏所有的Artisan命令,Http目录包含了控制器、中间件和请求等。
其他目录会在开发者通过Artisan命令make生成相应类时生成到app目录下例如,app/Jobs目录直到开发者执行make:jo游戏b命令生成任务类时才会出现在app目录下此处需要注意的是,app目录中的很多类都可以通过Artisan命令生成,要查看所有有效的命令,可以在终端中运行php artisan list make命令。
接游戏下来以项目文件1000phone为例,对app目录的组织结构作详细介绍,如图所示。
l Console目录:主要包含所有的A rtisan命令这些命令类可以由make:command命令生成该目录下还有游戏 Console Kernel 类,在这里可以注册自定义的 Artisan 命令以及定义调度任务。
l Exceptions目录:主要包含应用的异常处理器,如果需要自定义异常如何记录异常或渲染,需要修改游戏Handler类l Http目录:包含了控制器、中间件以及表单请求等,用于处理几乎所有进入应用的请求。
l Providers目录:包含应用的所有服务提供者服务提供者在启动应用过程中绑定服务到容器、注册游戏事件以及执行其他任务,为即将到来的请求处理做准备在新安装的 Laravel 应用中,该目录已经包含了一些服务提供者,可以按需添加新的服务提供者到该目录。
Laravel的生命周期Ø生命周期概述Larav游戏el的生命周期从public/index.php开始,以public/index.php结束Laravel应用的所有请求入口都是public/index.php 文件,所有请求都会被Web服务器(Ap游戏ache/Nginx)导向这个文件。
Ø生命周期详解Laravel的生命周期围绕public/index.php进行,public/index.php的源码如例所示。
从例所示的源码可以看出,Larave游戏l处理请求分四步完成:l 第一步:载入Composer生成的自动加载设置,包括所有composer require依赖l 第二步:生成容器Container,Application实例,并向容器注册核游戏心组件。
l 第三步:处理请求,生成并发送响应l 第四步:请求结束,进行回调Laravel服务容器服务容器是用来管理类依赖与运行依赖注入的工具Laravel框架中使用服务容器来实现控制反转和依赖注入Ø控游戏制反转和依赖注入。
l 控制反转(IOC),即把创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由开发者自己把控,而现在这种权力转移到第三方,也就是Laravel中的服务容器l 依赖注入(DI游戏)即实现容器在运行中动态的为对象提供依赖资源。
Ø服务容器为帮助大家更好的理解Laravel服务容器,接下来通过代码演示服务容器的工作机制。
在例中,第22、23行实例化People类及调用putDog(游戏)方法,要想实现该方法,需要依赖Dog类,即在People类中利用构造函数来添加Dog依赖。如果使用控制反转,则依赖注入如例所示。
在例中,第5行代码People类通过构造函数声明需要的依赖类(Dog类游戏),并由服务容器完成注入Laravel服务提供者Ø服务提供者概念从某种意义上说,服务提供者功能类似于HTTP控制器,HTTP控制器用于为相关路由注册提供统一管理,而服务提供者用于为相关服务容器提供统一游戏绑定场所,除此之外,服务提供者会处理一些初始化启动操作。
服务提供者是Laravel的核心,Laravel的每个核心组件都对应一个服务提供者,核心组件类通过服务提供者完成注册、初始化以供后续调用Ø服务提游戏供者举例说明1. 定义服务类首先,在项目1000phone。
/app下分别创建Contracts和Services文件夹,如图所示。
其次,在Contracts文件下新建脚本TestContract.p游戏hp,如例所示。
2. 创建服务提供者接下来定义一个服务提供者TestServiceProvider,用于注册该类到容器中创建服务提供者可以使用Artisan命令:php artisan make:pr游戏ovider TestServiceProvider。
打开命令行窗口,执行以下命令,如图所示。
为便于大家学习,此处给出本组操作的所有命令,如下所示。
执行上述命令后,出现Provider created游戏 successfully,说明TestServiceProvider服务提供者创建成功此时,会在1000phone/app/Providers目录下自动生成TestServiceProvider.p游戏hp脚本,如图所示。
3. 注册服务提供者创建服务提供者类后,接下来需要将该服务提供者注册到应用中。打开配置文件config/app.php,将该类追加到providers数组中,如例所示。
4. 测试服游戏务提供者首先,在命令行窗口中使用Artisan命令创建一个资源控制器TestController,输入命令php artisan make:controller TestController,如图所示游戏。
执行上述命令后,会在1000phone/app/Http/Controllers目录下自动生成TestController.php脚本,如图所示。
其次,编辑脚本TestController.php再游戏次,打开路由配置文件routes/web.php,定义一个控制器路由,如例所示最后,在浏览器中输入localhost/section18/1000phone/public/1000phone_test游戏,运行结果如图所示。
从图中可以看出,本小节创建服务提供者测试用例执行成功Laravel路由详解Ø路由基本概念Laravel路由和路由器的原理相似,它的功能是将用户的请求进行路由解析,然后将解析后的结果游戏分配到对应的模块或控制器中。
所有的 Laravel 路由都在routes/web.php文件中定义,该文件由框架自动加载Ø基础路由Laravel路由支持所有的HTTP方法,例如,GET、POST、DE游戏LETE等构建最基本的路由只需一个 URL 和一个闭包,具体示例如下:。
以上列举了几种较为常见的路由,在实际开发中,开发者可根据客户端请求方式选用相应的路由。Ø基础前缀使用prefix方法可以为路由组游戏中给定的URL增加前缀,具体示例如下:
在以上所示路由组中,为匹配的URL加上admin前缀 Laravel控制器Ø创建控制器在命令行窗口中使用Artisan命令创建一个资源控制器MyControlle游戏r,输入命令php artisan make:controller MyController,如图所示。
图18.1 运行结果执行上述命令后,会在1000phone/app/Http/Controlle游戏rs目录下自动生成MyController.php脚本Ø结合路由设置控制器当用户请求服务器的show路径时,服务器会执行MyController中的show方法,具体代码如下所示:。
Route::ge游戏t("/show" , MyController@show);Ø带参数的路由使用控制器当用户请求服务器的edit路径时,服务器会执行MyController中的edit方法,并且后面需带有参数ID,具游戏体代码如下所示:
Route::get("/edit/{id}" , MyController@edit);Ø测试案例编辑MyController控制器,如例所示:
浏览器输入localhost/sect游戏ion18/1000phone/public/index.php/show,如图所示。
浏览器输入localhost/section18/1000phone/public/index.php/edit/游戏1000,如图所示。
Laravel视图 Laravel内置的模板引擎是blade,模板文件默认放在Laravel根路径下的resource/views目录下Ø创建控制器在命令行窗口中使用Artisan游戏命令创建一个资源控制器ViewController,输入命令php artisan make:controller ViewController,如图所示。
执行上述命令后,会在1000phone/ap游戏p/Http/Controllers目录下自动生成ViewController.php脚本Ø匹配路由编辑web.php,新建路由匹配规则,如下所示:Route::get("/view" , ViewC游戏ontroller@view);。
Ø新建视图进入resources/views新建view.blade.php,如例所示。
Ø测试用例编辑ViewController控制器,具体代码如例所示。
浏览器输入游戏localhost/section18/1000phone/public/index.php/view,如图所示。
Laravel数据库操作Web程序的运行离不开数据库的支持,数据库接口设计的好坏决定了游戏程序的扩展性和执行效率Laravel框架通过统一的接口实现对不同数据库的操作,使得程序连接和操作数据库变得非常容易。
目前,Laravel框架支持MySQL、Postgres、SQLite和SQL Se游戏rver四种数据库Ø数据库配置在Laravel中一般通过config目录下的database.php文件实现数据库的配置,默认情况下,Laravel连接MySQL数据库的代码如下所示。
其中,env对应游戏的是.env文件;DB_HOST表示主机名;DB_PORT表示端口号;DB_DATABASE表示数据库名称;DB_USERNAME表示数据库用户名;DB_PASSWORD表示数据库密码Ø
连接数据库步骤游戏一:数据准备首先使用命令提示符窗口创建一个名称为section18的数据库,SQL语句如下所示CREATE DATABASE section18;接着将当前使用的数据库切换为section18,SQL游戏语句如下所示。
USE section18;然后创建一张名称为student的数据表,表中设置四个字段,分别为学生ID、学生姓名、学生专业和学生成绩,SQL语句如下所示。
步骤二:修改数据库配置文件dat游戏abase.php,如下所示。
步骤三:修改1000phone目录下的.env文件,如下所示。
步骤四:创建并编辑DBController控制器在命令行窗口中使用Artisan命令创建一个资源控制器DBC游戏ontroller,输入命令php artisan make:controller DBController,如图所示。
图18.1 运行结果执行上述命令后,会在1000phone/app/Http/C游戏ontrollers目录下自动生成DBController.php脚本编辑DBController控制器,具体代码如例所示。
步骤五:分配路由,如下所示Route::get("/test1" , DBC游戏ontroller@test1);最后,浏览器中输入localhost/section18/1000phone/public/index.php/test1,运行结果如图所示。
从图中可以看出,程序运行游戏后未出现错误,说明连接数据库操作成功接下来,使用DB Facade原生方式对数据表student作增删改查操作DB Façade原始方式ØDB Facede原始方式1. 新增数据
首先编辑web.php游戏,新建路由匹配规则,如下所示:Route::get("/addMessage" , DBController@addMessage);然后编辑DBController.php,新增addMessage游戏()方法,如例所示。
在例中,新增数据使用DB类的静态方法insert()方法,第一个参数是SQL语句,第二个参数是一个数组,将要插入的数据放入数组中“?”表示占位符,通过数据库接口层PDO的方式,达到游戏防止SQL注入的目的该方法若成功则返回TRUE,若失败则返回FALSE。
2. 查询数据首先编辑web.php,新建路由匹配规则,如下所示:Route::get("/findMessage" , DBC游戏ontroller@findMessage);然后编辑DBController.php,新增findMessage()方法,如例所示。
在例中,使用DB::select("select * from s游戏tudent")查询数据表student所有用户信息;dd()方法是Laravel内置函数,可以将一个数组以节点树的形式展示出来3. 更新数据
首先编辑web.php,新建路由匹配规则,如下所示:Rou游戏te::get("/updMessage" , DBController@updMessage);然后编辑DBController.php,新增updMessage()方法,如例所示。
在例中,SQL语游戏句update student set score= ? where id= ? ,[100,1]表示更改id为1的学生信息该方法返回的结果为受影响的记录数,即成功返回int(1)失败返回int(0)游戏。
4. 删除数据首先编辑web.php,新建路由匹配规则,如下所示:Route::get("/delMessage" , DBController@delMessage);然后编辑DBControll游戏er.php,新增delMessage()方法,如例所示。
在例中,SQL语句delete from student where id= ?,[1])表示删除id为1的用户信息该方法返回的结果为受影响的游戏记录数,即成功返回int(1)失败返回int(0)Ø查询构造器。
1. 新增单条数据首先编辑web.php,新建路由匹配规则,如下所示:Route::get("/addSecond" , DBContr游戏oller@addSecond);然后编辑DBController.php,新增addSecond ()方法,如例所示。
在例中,使用DB::table("tableName")->insert([字段游戏名=>字段值])方式新增数据,执行结果为Bool值,若成功则返回TRUE,若失败则返回FALSE2. 新增单条数据并获取ID值。
如果要在新增单条数据后获取其ID值,可选择使用insertGetId()游戏方法首先编辑web.php,新建路由匹配规则,如下所示:Route::get("/addSecondGetId" , DBController@addSecondGetId);。
然后编辑DBContr游戏oller.php,新增addSecondGetId ()方法,如例所示。
在例中,使用DB::table("tableName")->insertGetId ([字段名=>字段值])方式获取新增数据I游戏D值3. 新增多条数据首先编辑web.php,新建路由匹配规则,如下所示:Route::get("/addSecondMany" , DBController@addSecondMany);
然后编辑D游戏BController.php,新增addSecondMany ()方法,如例所示。
使用DB::table("tableName")->insert([字段名=>字段值] , [字段名=>字段值], 游戏[字段名=>字段值]…)方式新增多条数据,执行结果为Bool值,若成功则返回TRUE,若失败则返回FALSE。
4. 修改数据首先编辑web.php,新建路由匹配规则,如下所示:Route::get("游戏/updSecond" , DBController@updSecond);然后编辑DBController.php,新增updSecond()方法,如例所示。
在例中,SQL语句DB::table("游戏tableName ")->where()->update([字段名=>字段值])表示更改id为4的用户信息该方法返回的结果为受影响的记录数,即若成功则返回int(1),若失败则返回int(0)。
5.游戏 删除数据首先编辑web.php,新建路由匹配规则,如下所示:Route::get("/delSecond" , DBController@delSecond);然后编辑DBController.ph游戏p,新增delSecond()方法,如例所示。
在例中,SQL语句DB::table("tableName ")->where()->delete()表示按条件删除某个用户信息该方法返回的结果为受影响的游戏记录数,即若成功则返回int(1),若失败则返回int(0)。
6. 查询数据首先编辑web.php,新建路由匹配规则,如下所示:Route::get("/findSecond" , DBControl游戏ler@findSecond);然后编辑DBController.php,新增findSecond()方法,如例所示。
在例中,第3行使用get()方法表示查询数据表所有用户信息;第4行使用echo输出游戏标签表示将查询后的结果格式化输出;第6行使用first()方法表示查询结果集中第一条数据信息;第7行使用where()和get()方法表示按指定条件查询结果;第8至9行使用select()、where游戏()和get()方法一起使用表示查询指定字段。
查询构造器在例中,第3行使用get()方法表示查询数据表所有用户信息;第4行使用echo输出标签,表示将查询后的结果格式化输出;第6行使用first()方游戏法表示查询结果集中第一条记录;第7行使用where()和get()方法表示按指定条件查询结果;第8、9行使用select()、where()和get()方法一起使用表示查询指定字段。
小结:介绍了Lar游戏avel框架的基础知识、Laravel框架安装、Laravel框架目录结构、Laravel生命周期、Laravel服务容器以及Laravel路由详解等通过本章的学习,大家要能够掌握Laravel框架的游戏使用方法,重点掌握框架的安装以及对增、删、改、查操作。
亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。