Laravel5.8教程
文章目录
一、目录结构
|
|
新建项目:
|
|
二、路由
1. 路由分组
|
|
2. 命令行查看现有路由
|
|
3. 路由别名
|
|
三、数据库增删改查
1. 获取表
|
|
2. 添加数据
|
|
3. 修改数据
|
|
4. 查询数据
1. get()
|
|
查询的每一行的记录是对象的形式,不是数组,所以需要使用$item->id,而不能使用$item[‘id’]。
2.value()
|
|
3.orderBy()
|
|
4.分页操作
|
|
limit:表示限制输出的条数
offset:表示从什么地方开始
5. 删除数据
|
|
6. 执行任意的sql语句
|
|
四、视图
1.路径
|
|
2. 命名规则
3. 展示视图方法
|
|
4. 变量分配和展示
view("模板文件名称",数组)view("模板文件名称")->with(数组)view("模板文件名称")->with(名称,值)->with(名称,值)- 展示:
{{$value1}}
compact:
语法:compact(var1,var2…)
创建一个包含变量名和它们的值的数组。
任何没有变量名与之对应的字符串都被略过。
5. 模板中使用函数
|
|
6. foreach循环遍历标签
|
|
7.if判断条件标签
|
|
8. 模版的继承和包含
- 公共模板使用
@yield(“区块名称”)
|
|
- 子页面
|
|
-
模版包含
1@include("文件名")
9. 外部静态文件的引入
|
|
五、控制器
1. 路径
|
|
2. 命令行创建
|
|
3. 获取参数
- Input::has():判断是否有参数
- Input::get(“参数名称”,“默认值”)
- Input::post(“参数名称”,“默认值”)
- Input::any(“参数名称”,“默认值”)
- Input::all()
六、模型
Laravel 自带的 Eloquent ORM 提供了一个美观、简单的与数据库打交道的 ActiveRecord 实现,每张数据表都对应一个与该表进行交互的“Model模型”,模型允许你在表中进行数据查询,以及插入、更新、删除等操作。
AR模式三个核心(映射):
每个数据表 与数据表进行交互的Model模型映射(实例化模型)
记录中的字段 与模型类的属性映射(给属性赋值)
表中的每个记录 与一个完整的请求实例映射(具体的CURD操作)
1. 定义模型
定义模型的位置,默认是在app目录下面,但是为了管理方便,建议分目录进行创建。
本身laravel对模型的命名没有严格的要求,一般采用 表名(首字母大写).php
创建模型:
|
|
⚠️注意事项:
第一:(必做)定义一个$table属性,值是不要前缀的表名,如果不指定则使用类名的复数形式作为表名。如果模型为Member模型在不指定table属性的情况下,其默认会去找members表。修饰词:protected
第二:(可选)定义$primaryKey属性,值是主键名称,如果需要使AR模式的find方法,则可能需要指定主键(Model::find(n)),在主键字段不是id的时候则需要指定主键。修饰词:protected
第三: (可选)定义$timestamps属性,值是false,如果不设置为false,则默认会操作表中的created_at和updated_at字段,我们表中一般没有这两个字段,所以设置为false,表示不要操作这两个字段。修饰词:public
第四:(可选)定义$fillable属性,表示使用模型插入数据时,允许插入到数据库的字段信息。修饰词:protected
使用模型中create插入数据时,要设置$fillable允许入库的字段,使用$guarded是设置排除入库的字段。
2. 模型控制器的调用
-
直接像使用DB门面一样的操作方式:以调用静态方法为主的形式,该形式下模型不需要实例化,例如:
1 2// Member::get() 等价于 DB::table(‘member’) -> get(); Member::get(); -
实例化模型:
1 2$model = new Member(); $model -> get();
3. 模型的增删改查
首先,在控制器文件引入Request类:use illuminate\http\Request;
Request类的使用:
|
|
1. 添加数据
|
|
注意:如果使用
create方法,则需要在模型中定义fillable属性,允许写入字段的定义,如果没有时间相关字段也需要禁用时间自动更新功能.
2. 查询数据
|
|
其返回值默认是一个对象。
如果需要在laravel中对象的结果集转化成数组,则需要在最终添加方法的调用:
1-> get()-> toArray();
3. 修改数据
|
|
4. 删除数据
|
|
七、CSRF攻击
1. 什么是CSRF攻击
CSRF是跨站请求伪造(Cross-site request forgery)的英文缩写:
Laravel框架中避免CSRF攻击很简单:Laravel自动为每个用户Session生成了一个CSRF Token,该Token可用于验证登录用户和发起请求者是否是同一人,如果不是则请求失败。【该原理和验证码的原理是一致】
Laravel提供了一个全局帮助函数csrf_token来获取该Token值,因此只需在视图提交表单中添加如下HTML代码即可在请求中带上Token:
|
|
2. laravel中CSRF机制
在laravel中是默认开启csrf验证机制的,如果不携带token值,会提示报错:

如何携带:
|
|
csrf_token和csrf_field的区别:
- csrf_token:只是输出token的值
- csrf_field:输出了一整个的input隐藏域
⚠️:在ajax请求中需要使用csrf_token。
3. 从CSRF验证中排除例外路由
并不是所有请求都需要避免CSRF攻击,比如去第三方API获取数据的请求。
可以通过在VerifyCsrfToken(app/Http/Middleware/VerifyCsrfToken.php)中间件中将要排除的请求URL添加到$except属性数组中:
|
|
八、表单验证
在Laravel中,验证器检测验证参数不通过时,会将提示信息和表单数据都保存在session中,并且验证不通过时候会自动跳转到上一个页面。
1. 基本语法:
|
|
validate方法接受一个HTTP请求输入数据和验证规则,如果验证规则通过,代码会继续往下执行;
然而,如果验证失败,则会抛出一个异常,相应的错误响应也会自动发送给客户。在一个传统的HTTP请求中,将会生成一个重定向响应,如果是AJAX请求则会返回一个JSON响应。
补充:
1Input::method(); // 返回GET或者POST,用于判断请求类型
2. 基本验证规则:
- required:不能为空
- max:255:最长255个字符
- min:1:最少1个字符
- email : 验证邮箱是否合法
- confirmed:验证两个字段是否相同,如果验证的字段是password,则必须输入一个与之匹配的password_confirmation字段
- integer:验证字段必须是整型
- ip:验证字段必须是ip地址
- numeric:验证字段必须是数值
- max:value:验证字段必须小于等于最大值,和字符串、数值、文件字段的size规则一起使用。
- min:value:验证字段必须大于等于最小值,和字符串、数值、文件字段的size规则一起使用。
- size:value :验证字段必须有和给定值value想匹配的尺寸,对字符串而言,value是相应的字符数目,对数值而言,value是给定整型值;对文件而言,value是相应的文件字节数。
- string: 验证字段必须是字符串
- unique:表名,字段,需要排除的ID
注意:多个验证规则之间用
"|"字符来进行分割。
例如:
|
|
3. 输出错误信息
Laravel会自动将验证错误信息保存到session中,每一次请求视图的时候,Laravel都会自动从session数据中检查错误信息,如果有则将其绑定到视图。
我们可以很方便的通过laravel给定的$errors变量,获取该对象的所有的错误信息。$errors变量是一个Illuminate\Support\MessageBag实例。
在页面中展示错误信息:
|
|
4. 将输出结果转换为中文
前往https://packagist.org 搜索larval-lang,
使用composer安装;
|
|
**语言包文件在vendor/caoue/laravel-lang中;将你需要的语言目录复制到resources/lang目录下即可。**同时,修改配置文件
config\app.php中的locale配置项。
1'locale' => 'zh-CN',
九、文件上传
在Laravel中,文件上传被看作是一个简单的http请求来看待。
在页面中想要实现表单上传,需要以下要求:
- 具有form标签,method必须为post,必须具备enctype属性
- 至少具有一个input类型为file的标签;
- 具有一个提交按钮;
|
|
文件上传错误状态码error的取值范围为0-7,但是不包括5,其中0表示成功;
在php中文件上传的本质则是文件的移动:
move_upload_file()
1. 获取文件
在Laravel中,可以使用Illuminate\Http\Request实例提供的file方法或者动态属性来访问上传文件,file方法返回一个Illuminate\Http\UploadedFile类的实例,该类继承自PHP标准库中提供与文件交互方法的SqlFIleInfo类:
|
|
2.判断文件是否存在
也可以使用hasFile方法来判断文件在请求中是否存在:
|
|
3. 验证文件是否上传成功
使用isValid方法判断文件在上传过程中是否出错:
|
|
4. 获取错误信息
如果文件上传错误,可以使用getErrorMessage()方法获取错误信息:
|
|
5. 保存文件
使用move方法保存文件:
|
|
关于项目中使用路径的说明:
如果路径是给php代码使用的,则路径建议使用
./形式;如果路径是给浏览器使用的则建议使用/形式。
6. 实例
|
|
如果使用的是create方法添加数据到数据表中,则这里还要修改一下模型里面的一个fillable属性,代表允许插入到数据库的字段。
十、数据分页
在laravel里面要完成分页是很简单的,它的思想之前的框架有些不一样,之前框架使用的是分页类完成分页,laravel是直接调用模型的分页方法,返回对应的数据和分页的字符串。
分页类路径:vender/laravel/framework/src/Illuminate/Pagination
|
|
当调用
paginate方法,获取Illuminate\Pagination\LengthAwarepaginator实例;当调用
simplePaginate方法,获取Illuminate\Pagination\Paginator实例;
在页面中可以调用links方法现实分页页码.
分页模板文件路径:
|
|
可以在此文件中修改页面的提示“»”和“«”改成上一页和下一页提示文字。
常用方法总结:
|
|
十一、验证码
Laravel框架自身并不具有验证码包,所以需要安装第三方依赖:
https://packagist.org/packages/mews/captcha
十二、数据表的迁移和填充
迁移:创建数据表的操作+删除数据表的操作
填充:往数据表里填充写入测试的数据(数据的插入操作)
1. 数据的迁移
在迁移过程中,操作可以分为两个部分:创建与编写迁移文件、执行迁移文件。
1.1 迁移文件编写
迁移文件路径:database/migrations/,存放在该目录下的文件都被称为迁移文件。
创建迁移文件,迁移文件名命名规则:create_paper_table,中间为表名
|
|
生成的初始代码包括up和down方法:
up方法表示创建数据表的方法down方法表示删除数据表的方法
|
|
1.2 执行迁移文件
Up方法的执行:
如果在当前的项目中第一次执行迁移文件的话,则需要先去执行:
1php artisan migrate:install
在执行过上述的命令之后,在数据表中会多出一个数据表,migrations,用于创建记录迁移文件的记录数据表;
|
|
Down方法执行:(回滚操作,删除数据表)
|
|
注意:删除(回滚)之后会删除上一个批次的迁移记录,并且同批次建立的数据表也会删除,但是迁移文件依旧存在,方便后期继续迁移(创建数据表)。
2. 数据表填充器
2.1 种子文件的编写
填充器默认目录:database/seeds/,该目录是填充器的默认目录。
创建填充器:
|
|
填充器中有run方法用于往数据库中写入数据。
在填充器文件中可以使用DB门面去新增数据,但是需要注意,DB门面在使用的时候不需要用户自己引入,一旦引入则报错,可以直接使用。建议使用DB门面方法写入新的数据
2.2 执行填充器文件
种子文件不像迁移文件,迁移操作有单独的对应关系表去记录,由于种子文件的执行没有任何的记录,所以在执行种子文件的时候需要指定需要执行的种子文件。
|
|
填充器的执行操作没有回滚一说,没有删除。如果需要回滚,则可以手动清空对应的数据表。
十三、命令行artisan
常用命令行操作:
|
|
十四、ajax
在laravel中框架如果需要响应json数据,则写成语法:
|
|
补充:在laravel中布尔值是不能被直接通过return 响应输出的。
文章作者 Bearkchan
上次更新 2020-03-02
