版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章Laravel框架《PHP网站开发实例教程(第3版)》学习目标/Target
了解Laravel框架,能够说出Laravel框架的特点。
掌握Laravel框架的创建,能够创建Laravel项目。
了解VSCode编辑器的配置,能够说出配置文件中各个配置项的作用。
了解Laravel框架的目录结构,能够说出各个目录的作用。学习目标/Target
掌握Laravel框架中路由的使用方法,能够配置路由、设置路由参数、给路由
设置别名和分组。
掌握Laravel框架中控制器的使用方法,能够创建控制器、配置控制器路由和
接收用户输入。
掌握Laravel框架中视图的使用方法,能够使用视图展示数据。
掌握Laravel框架中模型的使用方法,能够使用模型完成数据操作。章节概述/SummaryLaravel框架自发布以来备受PHP开发人员的喜爱,其用户数量增长速度十分快。本章将讲解Laravel框架的相关内容,主要包括Laravel框架的基础知识、路由、控制器、视图和模型等内容。目录/Contents11.111.211.3初识Laravel路由控制器11.4视图11.5模型初识Laravel11.1
先定一个小目标!了解Laravel框架,能够说出Laravel框架的特点。11.1.1Laravel概述11.1.1Laravel概述Laravel是一套简洁、优雅的Web应用框架,具有富于表达性且简洁的语法。它提供了强大的工具用于开发大型应用,这些工具包括自动验证、路由、Session、缓存、数据库迁移、单元测试等。11.1.1Laravel概述为了让框架统一管理所有的请求,整个项目对外只提供一个入口。单入口AR(活动记录)模式允许在模型类中定义方法来处理数据的业务逻辑。支持AR模式利用MVC可以更好地协同开发,为后期维护提供方便。MVC开发模式ORM(对象关系映射)将数据库中的表和记录转换为对象和属性,使用面向对象方式操作数据库。ORM方式操作数据库Laravel框架特点
先定一个小目标!掌握Laravel框架的创建,能够创建Laravel项目。11.1.2创建Laravel项目本书基于Laravel10.0讲解,该版本要求运行环境的PHP版本必须大于或等于8.1。创建Laravel项目的步骤:11.1.2创建Laravel项目在php.ini开启扩展:curl、fileinfo、gd、mbstring、openssl、pdo_mysql。1在httpd.conf开启rewrite模块,在httpd-vhost.conf配置虚拟主机,主机名www.laravel.test。2创建C:\web\www\laravel目录,在该目录下安装Laravel框架,安装结果:3创建Laravel项目的步骤:11.1.2创建Laravel项目重启Apache服务,使修改后的配置生效。4编辑hosts文件,添加域名的解析记录。5通过浏览器访问http://www.laravel.test,页面效果:6www.laravel.testlaravel.test
先定一个小目标!了解VSCode编辑器的配置,能够说出配置文件中每个配置项的作用。11.1.3配置VSCode编辑器配置VSCode编辑器:使用VSCode编辑器打开C:\web\www\laravel目录。111.1.3配置VSCode编辑器配置VSCode编辑器:创建.vscode目录,在该目录创建settings.json文件,对代码进行语法检查和自动格式化。2{"php.suggest.basic":false,"php.executablePath":"C:/web/php8.2/php.exe","phpcs.standard":"psr2","files.eol":"\n"}是否启用基本的PHP代码建议功能指定php.exe文件的路径指定PHP代码风格规范指定文件行尾的结束符11.1.3配置VSCode编辑器
先定一个小目标!了解Laravel框架的目录结构,能够说出每个目录的作用。11.1.4Laravel目录结构Laravel项目的一级目录:目录作用app框架核心目录,保存项目中的控制器、模型等bootstrap和框架的启动相关的文件config存放一些配置文件database数据库迁移文件及数据填充文件public存放入口文件index.php和前端资源文件(如CSS、JavaScript等)resources存放视图文件、语言包和未编译的前端资源文件routes存放框架中定义的所有路由storage存放编译后的模板、Session文件、缓存文件、日志文件等tests自动化测试文件vendor存放通过Composer加载的依赖11.1.4Laravel目录结构Laravel项目常用的子目录和文件:11.1.4Laravel目录结构类型路径作用目录app\Http存放与HTTP请求相关的文件目录app\Http\Controllers存放控制器文件文件app\Http\Controllers\Controller.php控制器的基类文件目录app\Http\Middleware中间件目录目录app\Models模型目录文件app\Models\User.phpUser模型文件文件bootstrap\app.php创建Laravel应用实例文件config\app.php全局配置文件文件config\auth.phpAuth模块的配置文件文件config\database.php数据库配置文件文件config\filesystem.php文件系统的配置文件目录database\factories存放工厂模式的数据填充文件1/2Laravel项目常用的子目录和文件:11.1.4Laravel目录结构类型路径作用目录database\migrations存放数据库迁移文件目录database\seeders存放数据填充器文件目录resources\views存放视图文件文件routes\web.php定义路由的文件目录storage\app存放用户上传的文件目录storage\framework存放与框架自身相关的文件目录storage\logs存放日志文件文件public\index.php入口文件文件.env环境变量配置文件文件artisan脚手架文件文件composer.jsonComposer依赖包配置文件2/2路由11.2
先定一个小目标!掌握配置路由的语法,能够定义不同请求方式的路由。11.2.1配置路由Laravel框架的路由在routes\web.php中配置,该文件已经添加了一个默认路由:Route::get('/',function(){returnview('welcome');});匹配路径为“/”,view()函数表示要显示的视图,参数welcome是视图文件的名称11.2.1配置路由定义路由的语法格式:语法格式Route::请求方式('请求URI',匿名函数或控制器相应的方法);请求方式如下:get、post、put、patch、delete、options11.2.1配置路由Route类中提供了match()和any()两个静态方法,match()用于在一个路由中同时匹配多个请求方式;any()用于在一个路由中匹配任意请求方式。语法格式//同时匹配get和post请求方式Route::match(['get','post'],'请求URI',匿名函数或控制器相应的方法);//匹配任意请求方式Route::any('请求URI',匿名函数或控制器相应的方法);11.2.1配置路由请求URI是一个完整URL地址中从域名后面的“/”开始的路径,不含请求参数。下面演示完整的URL对应的请求URI:11.2.1配置路由完整URI请求URIhttp://www.laravel.test//http://www.laravel.test/hello/123/hello/123http://www.laravel.test/hello/456?a=1/hello/456定义路由时,请求URI中的/可以省略,如/hello修改为hello,运行结果不变。在路由文件中定义路由,用于匹配/hello:11.2.1配置路由Route::get('/hello',function(){return'hello'; //返回一个字符串给浏览器,以方便测试});浏览器访问http://www.laravel.test/hello,运行结果如下:
先定一个小目标!掌握路由参数的定义,能够定义路由时设置必选参数和可选参数。11.2.2路由参数Laravel允许在请求URI中传递一些动态参数,称为路由参数。通过路由参数可以传递请求信息,如id。11.2.2路由参数对应语法对应语法路由参数必选参数可选参数11.2.2路由参数{参数名}{参数名?}演示使用必选参数和可选参数。必选参数示例代码Route::get('find/{id}',function($id){return'输入的id为'.$id;});11.2.2路由参数Route::get('find2/{id?}',function($id=0){
return'输入的id为'.$id;});可选参数示例代码
先定一个小目标!掌握路由别名的设置,能够给路由设置别名。11.2.3路由别名路由的使用场景:<ahref="/hello/123">hello</a>视图A视图B视图C11.2.3路由别名3个视图都使用路由,当路由发生改变时,这3个视图都需要修改,非常麻烦。11.2.3路由别名给路由/hello/123设置别名。设置路由别名后,在其他地方用到这个路由地址的时候,可以不书写原来的地址,而是通过别名来引用这个地址。11.2.3路由别名给路由设置别名调用name()方法。语法格式Route::请求方式('请求URI',匿名函数或控制器相应的方法)->name('路由别名');11.2.3路由别名给路由/hello/123设置别名。示例代码
Route::get('/hello/123',function(){
return'hello';
})->name('hello');在视图中使用路由别名。示例代码<ahref="{{route('hello')}}">hello</a>11.2.3路由别名
先定一个小目标!掌握路由分组,能够根据需求对路由分组。11.2.4路由分组路由分组使用Route::group()来实现:11.2.4路由分组语法格式Route::group(公共属性数组,回调函数);公共属性数组用于指定同组路由的公共属性,如前缀、中间件等。回调函数中的代码用于定义同组路由。路由文件中有如下路由:/admin/login/admin/logout/admin/user/addRoute::group(['prefix'=>'admin'],function(){Route::get('login',function(){return'这里是/admin/login';});Route::get('logout',function(){return'这里是/admin/logout';});Route::get('user/add',function(){return'这里是/admin/user/add';});});前缀路由11.2.4路由分组控制器11.3
先定一个小目标!掌握控制器的创建,能够使用命令自动生成控制器。11.3.1创建控制器控制器文件的保存目录为app\Http\Controllers,控制器文件应包含命名空间的声明和引入,以及控制器类的定义。这些代码不容易记忆,且容易出错。为此,Laravel提供了自动生成控制器的命令。11.3.1创建控制器自动生成控制器的命令:命令phpartisanmake:controller目录名/控制器名phpartisan表示使用Laravel提供的artisan工具make:controller表示生成控制器,后面书写控制器名11.3.1创建控制器演示使用命令创建TestController控制器:11.3.1创建控制器在命令提示符窗口中切换到C:\web\www\laravel目录,创建TestController控制器。1查看app\Http\Controllers\TestController.php文件。2phpartisanmake:controllerTestController<?phpnamespaceApp\Http\Controllers;useIlluminate\Http\Request;classTestControllerextendsController{
//}演示使用命令创建TestController控制器:11.3.1创建控制器创建Admin/TestController控制器。3查看\Admin\TestController.php文件。4phpartisanmake:controllerAdmin/TestController<?phpnamespaceApp\Http\Controllers\Admin;useApp\Http\Controllers\Controller;useIlluminate\Http\Request;classTestControllerextendsController{//}
先定一个小目标!掌握控制器路由的定义,能够给控制器定义路由。11.3.2控制器路由控制器路由是路由的一种定义方式。控制器路由是引入要使用的控制器的命名空间。指定控制器的方法来处理请求,只需将回调函数修改为“[控制器类名,方法名]”的形式。11.3.2控制器路由演示定义控制器路由:11.3.2控制器路由示例代码useApp\Http\Controllers\Admin\TestControllerasAdminTestController;Route::get('admin/test1',[AdminTestController::class,'test1']);
先定一个小目标!掌握接收用户输入的方式,能够通过Request实例和方法的参数接收用户输入。11.3.3接收用户输入接收用户输入的方式通过Request实例接收用户输入通过路由参数接收用户输入11.3.3接收用户输入1.通过Request实例接收用户输入Request实例保存了当前HTTP请求的信息,通过它可以获取用户输入的数据。Request实例常用的方法:query()方法:返回URL查询参数的关联数组。path()方法:获取请求路径信息。url()方法:获取请求的完整URL。method()方法:获取请求的方式,如GET、POST。has()方法:可以检查请求数据中是否存在指定的键名。all()方法:获取所有请求数据,以关联数组的形式返回。input()方法:获取特定的请求数据。11.3.3接收用户输入实现接收用户输入的数据3个步骤:11.3.3接收用户输入在文件中导入Illuminate\Http\Request命名空间在方法中通过依赖注入获得$request对象调用$request对象的方法获取用户输入的数据使用input()方法接收用户输入:11.3.3接收用户输入<?phpnamespaceApp\Http\Controllers;useIlluminate\Http\Request;
//导入命名空间classTestControllerextendsController{publicfunctioninput(Request$request) //依赖注入
{$name=$request->input('name'); //调用input()方法获取数据
return'name的值为'.$name;}}演示使用Request实例接收请求数据和路由参数。(1)接收请求数据在路由中给input()方法配置路由规则:11.3.3接收用户输入useApp\Http\Controllers\TestController;Route::get('test/input',[TestController::class,'input']);(2)接收路由参数修改路由文件,在路由中匹配name参数:11.3.3接收用户输入Route::get('test/input/{name}',[TestController::class,'input']);publicfunctioninput(Request$request){$name=$request->name;return'name的值为'.$name;}TestController的input()方法:2.通过路由参数接收用户输入定义路由规则时定义$name参数:11.3.3接收用户输入Route::get('test/input/{name}',[TestController::class,'input']);publicfunctioninput($name){return'name的值为'.$name;}在input()方法中接收$name参数:视图11.4
先定一个小目标!掌握视图文件的创建,能够根据需求创建视图文件。11.4.1创建视图文件视图文件保存在resources\views目录,用户也可以在该目录下创建子目录,将不同模块的视图放在不同子目录中。视图文件的结尾形式:“.blade.php”:使用Blade模板引擎,可以使用模板语法和PHP原生语法。“.php”:不使用模板引擎,只能使用PHP原生语法。11.4.1创建视图文件在控制器中加载视图文件使用view()函数,在view()函数中指定视图名称,视图名称的前面还可以添加路径。引入home\test\show.html视图文件的两种写法:returnview('home/test/show'); //写法1,用“/”分隔returnview('home.test.show'); //写法2,用“.”分隔11.4.1创建视图文件演示视图文件的使用:创建resources\views\show.blade.php文件。1<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>Document</title></head><body>
当前显示的视图文件是show.blade.php</body></html>11.4.1创建视图文件演示视图文件的使用:在TestController控制器中创建show()方法,加载视图文件。2publicfunctionshow(){//加载视图文件resources\views\show.blade.phpreturnview('show');}11.4.1创建视图文件演示视图文件的使用:给show()方法添加路由。3Route::get('test/show',[TestController::class,'show']);11.4.1创建视图文件通过浏览器访问测试,查看运行结果。4
先定一个小目标!掌握向视图传递数据的方法,能够使用view()函数或with()方法为视图传递数据。11.4.2向视图传递数据在视图文件中不能直接访问控制器中的变量,需要在控制器中为视图传递数据。使用view()函数或with()方法为视图传递数据,向视图传递数据的3种方式://方式1:通过view()函数的第2个参数传数据returnview(视图文件,数组);//方式2:通过with()方法传数据returnview(视图文件)->with(数组);//方式3:通过连续调用with()方法传数据returnview(视图文件)->with(名称,值)->with(名称,值)…11.4.2向视图传递数据演示在控制器中向视图传递数据:在TestController的show()方法中准备一个数组,将其传给视图。1publicfunctionshow(){$data=['content'=>'文本内容'];returnview('show',$data);}11.4.2向视图传递数据在视图文件中输出$content的值。2<body>{{$content}}</body>多学一招:compact()函数compact()函数compact()函数用于将多个变量打包成一个数组,其参数数量表示要打包的变量名,个数不固定。演示compact()函数的使用:publicfunctionshow(){
$content='文本内容';
$arr=[1,2];$data=compact('content','arr');returnview('show',$data);}多学一招:compact()函数compact()函数在视图文件中输出变量:<body><p>{{$content}}</p><p>{{implode(',',$arr)}}</p></body>
先定一个小目标!掌握遍历操作,能够在视图中遍历数组。11.4.3遍历操作在视图中输出数组时,需要对数组进行遍历,使用@foreach模板语法来实现。11.4.3遍历操作语法格式@foreach($variableas$key=>$value)循环体@endforeach在视图文件中遍历$data数组。11.4.3遍历操作示例代码
<body><h1>遍历操作</h1>
@foreach($dataas$v){{$v->id}}-{{$v->name}}<br>@endforeach</body>
先定一个小目标!掌握判断操作,能够在视图中判断数组。11.4.4判断操作在视图文件中使用@if模板语法进行判断操作。语法格式@if(条件表达式1)
语句1@elseif(条件表达式2)
语句2@elseif(条件表达式3)
语句3……@else
以上条件都不满足时执行的语句@endif11.4.4判断操作在视图文件中判断$week的值,输出星期几。示例代码
<body>
今天是:
@if($week==1)
星期一
@elseif($week==2)
星期二
……(此处读者可以添加更多判断)
@elseif($week==7)
星期日
@endif</body>11.4.4判断操作
先定一个小目标!掌握模板继承,能够实现模板继承。11.4.5模板继承在一个网站中,通常会有很多相似的页面,这就意味着这些相似的页面需要编写重复的代码。为了让重复的页面代码只写一次,可以利用模板继承实现。模板继承是指将一个完整页面中的公共部分放在父页面中,将不同的部分放在不同的子页面中,子页面通过继承父页面来获得完整页面。11.4.5模板继承模板继承示意图:11.4.5模板继承为了实现模板继承,需要先在父页面中使用@yield定义占位符,在子页面中填充内容。子页面需要显示父页面中公共部分时,会从父页面继承这些公共部分,从而得到完整页面。11.4.5模板继承@yield的语法格式@yield('区块名称')子页面继承父页面的语法格式@extends('需要继承的父页面')@section('区块名称')
区块内容@endsection实现模板继承的步骤:创建父页面文件resources\views\parent.blade.php。1<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>Document</title></head><body><header>头部区域</header><div>@yield('content')</div><footer>尾部区域</footer></body></html>11.4.5模板继承实现模板继承的步骤:创建子页面文件resources\views\child.blade.php。2@extends('parent')@section('content')<section>区块内容</section>@endsection在TestController的show()方法中通过view()函数加载子页面。3publicfunctionshow(){returnview('child');}11.4.5模板继承实现模板继承的步骤:通过浏览器访问,查看运行结果和源代码。411.4.5模板继承
先定一个小目标!掌握模板包含,能够实现模板包含。11.4.6模板包含模板包含的思路与模板继承正好相反,它是把多个页面中相同的部分抽取到子页面中,然后通过@include()将公共部分包含进来,得到完整页面。11.4.6模板包含模板包含示意图:11.4.6模板包含实现模板包含的步骤:创建主页面文件resources\views\main.blade.php。1<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>Document</title></head><body>@include('header')<div>内容区域</div>@include('footer')</body></html>11.4.6模板包含实现模板包含的步骤:创建头部区域文件resources\views\header.blade.php。2header>头部区域</header>在TestController的show()方法中通过view()加载主页面。4publicfunctionshow(){returnview('main');}11.4.6模板包含创建尾部区域文件resources\views\footer.blade.php。3<footer>尾部区域</footer>实现模板包含的步骤:通过浏览器访问,查看运行结果。511.4.6模板包含模型11.5
先定一个小目标!掌握模型的定义,能够使用命令定义模型。11.5.1定义模型在Laravel中,每张数据表都对应一个模型。利用模型可以实现对数据表数据的查询、添加、修改、删除等操作。模型文件默认保存在app\Models目录下,文件命名形式为“表名(首字母大写).php”,如Student.php、User.php。11.5.1定义模型使用phpartisan命令自动创建模型:phpartisanmake:model模型名为student表创建一个Student模型:phpartisanmake:modelStudentLaravel会自动将Student模型名转换为表名,并使用复数形式,即students。如果数据表的名称没有使用复数形式,需要在模型类中使用$table属性指定表名:classStudentextendsModel{protected$table='student';}11.5.1定义模型在模型类中可以添加的其他可选属性:$primaryKey:用于设置主键的名称,默认值为id。由于模型的一些方法需要通过主键才能实现,如果主键名称有误,会导致程序出错。$timestamps:是否自动维护时间戳,默认为true。当设为true时,模型会自动维护表中的created_at(创建时间)和updated_at(更新时间)字段。$fillable:表示允许某些字段可以被添加或修改,格式为一维数组形式。当使用模型的create()方法添加数据时,需要在$fillable数组中填写字段。$guarded:表示禁止某些字段被添加或修改,与$fillable只能二选一。11.5.1定义模型
先定一个小目标!掌握在控制器中使用模型的方法,能够在控制器中正确使用模型。11.5.2在控制器中使用模型模型的使用方式//方式1:静态调用Student::get();//方式2:实例化模型$student=newStudent();$student->get();11.5.2在控制器中使用模型在控制器中使用模型,需要先在控制器文件中引入模型的命名空间。为了保证能够通过模型访问数据库,需要修改.env文件中的数据库相关的配置。11.5.2在控制器中使用模型
先定一个小目标!掌握添加数据的方法,能够使用不同的方法添加数据。11.5.3利用模型添加数据1.为模型的属性赋值实例化模型后,可以直接给模型对象的属性赋值。模型的属性与数据表中的字段对应。赋值完成后调用save()方法即可添加数据。$student=newStudent();$student->name='save';$student->age='20';dump($student->save()); //添加数据dump($student->id); //获取自动增长id11.5.3利用模型添加数据2.使用模型的fill()方法填充数据fill()方法用于以数组的方式为模型填充数据,数组的键名对应数据表中的字段名。使用fill()方法前,需要先在模型类中定义允许填充的字段:protected$fillable=['name','gender'];11.5.3利用模型添加数据通过fill()方法填充数据,并调用save()方法添加数据:$data=['name'=>'fill','gender'=>'女'];$student=newStudent();$student->fill($data);$student->save();3.使用create()方法创建模型并填充数据create()方法是模型类的静态方法,它可以在创建模型的同时为模型填充数据。使用create()方法前,需要在模型类中定义允许填充的字段:protected$fillable=['name','gender'];11.5.3利用模型添加数据创建模型并填充数据,最后将数据保存:$data=['name'=>'tom','gender'=>'男'];$student=Student::create($data);$student->save();
先定一个小目标!掌握查询数据的方法,能够使用不同的方法查询数据。11.5.4利用模型查询数据find()方法查询数据的示例代码://查询主键为4的记录,返回模型对象$student=Student::find(4);dump($student->name); //获取name字段的值dump($student->toArray()); //将模型对象转换为数组//添加查询条件,返回name和gender字段$student=Student::where('name','tom')->select('name','gender')->find(1);dump($st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省八市高三3月联考理科综合物理试题
- 第24课 人民解放战争 课件-高一上学期统编版(2019)必修中外历史纲要上
- 浙江省北斗星盟2023-2024学年高三下学期适应性联考政治试卷2
- 第1课 从食物采集到食物生产 教学课件高二历史统编版(2019)选择性必修2经济与社会生活
- 工程收发文登记表
- 医务人员职业暴露预防及处理课件(完整版)
- 浙江省A9协作体2023-2024学年高一下学期期中联考地理试题
- 茶的历史完整版本
- 2022学年第一学期中职《哲学与人生》考试题库
- 道 法集体生活成就我 课件-2024-2025学年道德与法治部编版七年级上册
- 我的家乡安徽课件
- 波浪的基本知识课件
- 小学生劳动教育评价细则
- 专业工程分包业主审批表
- 装饰工程项目总承包管理措施完整版
- 行政综合管理岗位竞聘报告PPT模板
- 国企员工职务晋升(任免)考察审批表2021版
- 2022年北京地区成人本科学士学位英语真题及答案
- 冲压车间员工培训资料
- 全员育人导师制工作手册
- 甘肃广播电视大学钢结构(本)不计分-3.3小测验答案
评论
0/150
提交评论