1、安装laravel前开启php扩展
php_openssl.dll
php_pdo_mysql.dll
php_mbstring.dll
php_fileinfo.dll
php_curl.dll
apache的httpd.conf配置需打开
mod_deflate.so
mod_rewrite.so
2、框架启动
php artisan serve
或者运行public目录
3、路由请求方式
Route::get($url,$callback);
Route::post($url,$callback);
Route::put($url,$callback);
Route::patch($url,$callback);
Route::delete($url,$callback);
Route::options($url,$callback);
Route::match(['get','post'],'/',function(){
//
});
Route::any('/',function(){
//
});
match用法举例:
1.路由 web.php
Route::match(['get','post'],'/login',function(Request $request){
if ($request->isMethod('get')){
echo $request->input('user')."<br />";
return view('login');
}elseif($request->isMethod('post')){
echo $request->input('user')."<br />";
echo $request->input('pwd');
}
})->name('login');
2.视图 login.blade.php:
<html5>
<form action="{{Route('login')}}" method="post" name="form1">
{{csrf_field()}}
用户名<input type="text" name="user"><br />
密码<input type="text" name="pwd"><br />
<input type="submit"name="bt1" value="登录">
</form>
</html5>
如果路由出现:Call to undefined method Illuminate\Support\Facades\Request::isMethod()
需要在路由中引入request
use Illuminate\Http\Request as request;
4.控制器
通过artisan命令新建控制器,比如新建一个test控制器
php artisan make:controller TestController
新建控制器后,如果需要控制路由,那么在路由的文件中需要引入这个控制器
use App\Http\Controllers\TestController;
5.接受用户输入
接收用户输入类,laravel9中的input已经被request替代,无法使用input
use Illuminate\Http\Request;
之前接收参数静态方法,现在已被request替代
Input::get('参数名','默认值')
Input::all() 获取所有用户的输入
Input::get('') 获取单个用户的输入
Input::only([]) 获取指定几个用户的输入
Input::except([]) 获取指定几个用户的输入以外的所有的参数
Input::has('name') 判断某个输入的参数是否存在
6.数据库
控制器先引入DB门面
use Illuminate\Support\Facades\DB;
路由配置
a、对数据库的表增加数据有两个函数,insert()和insertGetId()
- insert() 可以同时添加一条或多条数据,返回布尔类型
- insertGetId() 只能添加一条数据,返回自增的id
控制器
使用inertGetId
b、修改数据,update
- update 修改整个记录中的某个字段
- increment 数字字段数值递增
- decrement 数字字段数值递减
- DB::table(‘member’)->increment(‘votes’); 数值+1
- DB::table(‘member’)->increment(‘votes’,5); 数值+5
- DB::table(‘member’)->decrement(‘votes’); 数值-1
- DB::table(‘member’)->decrement(‘votes’,5); 数值-5
案例,将id=3的name改为张三丰
c、查询数据
DB:table('member')->get();//相当于 select * form member;
返回集合对象
循环输出数据
取出id<3的数据
$data = $db ->where('id','<','3') -> get();
where的用法
- ->where()->where()->where 并且关系语法
- ->where()->orWhere()->orWhere 或者关系语法
取出单行数据
DB::table('member')->where('id','<','3')->first(); //返回值是一个对象
取出指定字段值
DB::table('member')->where('id','3')-value('email');
取多个字段的数据
DB::table('member')->select('name','email')-get();
DB::table('member')->select('name as user_name','email')-get();
排序操作
DB::table('member')->derBy('age','desc')-get();
分页操作
DB::table('member')->limit(3)->offset(2)-get();
- limit:表示限制输出的条数
- offset:从什么地方开始
删除数据
- Delete:删除记录
- Trunata:清空整个数据表
删除id=1的数据
DB::table('member')->where('id','=','1')->delete();
返回受影响行数
删除整个表
DB::table('member')->truncate();
执行sql语句
DB::table('member')->select('select * from member');
7.模板继承
- 父级文件:resources/views/home/test/parents.blade.php
- 子级文件:resources/views/home/test/5.blade.php
- 子级文件
parents.blade.php
<h1>我是头部</h1>
@yield('mainbody')
<h1>我是底部</h1>
子页面不需要再写头部和尾部
继承语法:
子模板中语法
@extends(‘需要继承的模板文件名’)
@section(‘mainbody’)//父级文件中绑定的mainbody
中间自己需要的代码
@endsection
test5.blade.php:
显示效果
也可直接引入其他文件:@include(‘文件名’)
此写法是将其他页面的内容显示在引入的位置
引入css:直接在头部写
<link rel="stylesheet" type="text/css" href="/css/app.css">
<link rel="stylesheet" type="text/css" href="{{asset('css')}}/app.css">
8.模型操作
laravel自带的Eloquen ORM提供了一个美观、简单的与数据库打交道的ActiveRecord实现,每张数据表都对应一个该表进行交互的“Model”模型,模型允许你在表中进行数据查询,以及插入、更新、删除等操作。
AR模式三个核心(映射):
- 每个数据表 与数据表进行交互的Model模型映射(实例化模型)
- 记录中的字段 与模型的属性映射(给属性赋值)
- 表中的每个记录 与一个完整的请求实例映射(具体的CURD操作)
定义位置:laravel9默认在app/Models目录下,为了方便管理,可分目录创建
比如在app/Models目录下创建Home和Admin目录
命名规则:一般采用首字母大写,如Member.php User.php
创建命令:
php artisan make:model Home/Member
定义模型注意事项:
- <必做>定义一个$table属性,值不要说前缀的表名,如果不指定则使用类名的复数形式作为表名。如果模型为Member模型在不指定table属性的情况下,其默认会去找members表。修饰词:protected
- <可选>定义$primarKey属性,值是主键名称,如果需要使AR模式的find方法,则可能需要指定主键(Model::find(n)),在主键不是id的时候则需要指定主键。修饰词:protected
- 定义$timestamps属性,值是false,如果不设置为false,则默认会操作表中的created_at 和 updated_at 字段,我们表中一般没有这个两个字段,所以设置为false,表示不要操作这两个字段。修饰词:public
- 定义$filleble属性,表示使用模型插入数据时,允许插入到数据库的字段信息。修饰词:protected
控制器引入模型:
use App\Models\Home\Member;
模型在控制器中的使用方法有2两种:
- 直接使用DB门面一样的操作方式:以静态调用为主的形式,该形式下模型不需要实例化,例如:Member::get(); 与之前的DB::table(‘member’)->get();不同
- 实例化模型,然后再去使用模型类,例如:$model=new member();$model->get();
定义路由
使用模型添加数据:
方式一:AR模式
需要先实例化模型,然后模型设置属性,最后调用save方法
$member = new Member();
$member -> name = value;
$member -> age = value;
$member -> save();
方式二:
建立简易表单,表单中有姓名、年龄、邮箱
首先在控制器中引入Request这个类
use Illuminate\Http\Request;
在方法中引入request参数
request语法:
$request->all();
$request->input('name');
$request->only(['name1','name2']);
$request->has('name');
$request->get('name');
a、添加操作代码语法:
Member::create($request->all());//返回值是一个对象
b、查询操作:
- 获取指定主键的一条数据
$data = Member::find(4);//静态方法调用,获取主键为4的数据
$data = Member::find(4)->toArray();//结果集转换为数组
- 获取指定条件的第一条记录
Member::where('id','>','4')->first();
- 查询多行并且指定字段
Member::all();
Member::all([字段1,字段2]);//与get方法的区别是,all不支持其他辅助查询方法
Member::get();
Member::get([字段1,字段2]);
- 按条件查询多个字段
Member::where('id','>',2)->get(['列1','列2']);
Member::where('id','>',2)->select('列1','列2')->get();
Member::where('id','>',2)->select(['列1','列2'])->get();
c、修改数据
ORM模型方式,需要先find方法获取对应的记录,返回一个模型对象
然后对该模型对象设置需要更新的数据
最后调用save保存
$user =User::find($id);
$user->title = $_POST['title'];
$user->content=$_POST['content'];
return $user->save()?'OK':'fail';//save()返回布尔值
AR模式更新数据
Member::where('id','>','4')->update(['age']=>'10');
$model = new Member();
$model->where('id','>','4')->update(['age']=>'10');
返回受影响记录行数
d、删除操作
$user = User::find($id);
return $user->delete()?'OK':'fail';
9.CSRF保护
中文文档:https://learnku.com/docs/laravel/9.x/csrf/12211
<form method="POST" action="/profile">
@csrf
<!-- 等同于... -->
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
CSRF默认开启,如果不添加,在提交数据会显示419错误
从CSRF验证中排除例外路由:/app/Http/Middleware/VerifyCsrfToken.php
10.自动验证
- 验证规则
- 输出错误信息
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
- 回填表单
当 Laravel 由于验证错误而生成重定向响应时,框架将自动 将所有请求的输入闪存到 session 中。这样做是为了方便你在下一个请求期间访问输入,并重新填充用户尝试提交的表单。
要从先前的请求中检索闪存的输入,请在 Illuminate\Http\Request 的实例上调用 old 方法。 old 方法将从 session 中提取先前闪存的输入数据:
$title = $request->old('title');
Laravel 还提供了一个全局性的old
。如果要在 Blade 模板 中显示旧输入,则使用old
来重新填充表单会更加方便。如果给定字段不存在旧输入,则将返回null
:
<input type="text" name="name" value="{{ old('name') }}">
- 错误信息中文化
php代码依赖网站:https://packagist.org/
搜索:laravel-lang
复制你想要的语言文件夹,中文是zh_CN,在你的 Laravel 应用程序resources/lang
或lang
目录中。 最后在/config/app.php中修改locale值,改成你需要是有个的语言简称
- 自定义错误信息中的字段翻译
在/lang/zh_CN/validation.php文件中,尾部添加以下代码
'attributes' =>[
'name' => '姓名',
'age' => '年龄',
'email' => '邮箱',
]
11.文件上传
- 文件上传必备信息
form标签
具备提交按钮
method=”POST”
enctype=”multipart/form-data”
- 上传错误状态码error取值0-7,没有5,0表示成功
上传成功返回信息$_FILES:
控制器代码:
视图代码:
路由代码:
12.数据分页
使用laravel自带的paginate来自动分页
laravel自带的css样式不好看,可自定义
{{$data -> links(‘pagination::bootstrap-4’)}}
13.验证码依赖安装与配置
https://packagist.org/ 搜索captcha
14.迁移文件
迁移文件默认位置:/database/migrations/ 文件夹
创建迁移文件命令:create_paper_table
php artisan make::migration 迁移文件名
执行迁移文件,如果在当前项目中第一次纸吸管迁移文件的话,需要先去执行:
php artisan migrate:install
在/database/migrations/ 文件夹只保留需要创建的数据表文件,然后执行:
php artisan migrate
回滚操作,删除数据表
php artisan migrate:rollback
15.填充器
填充器文件目录:/database/seeds/
创建填充器命令
php artisan make:seeder 填充器名称
填充器名称:大写表名+TableSeeder
比如:PaperTableSeeder
填充器代码实例:
执行填充器命令:
php artisan db:seed--class=需要纸吸管的种子文件名
上述命令的文件名不需要带后缀